Linux下多线程2——多线程的优点

使用多线程的理由1:

使用多线程的理由之一是和进程相比,它是一种非常"节俭"的多任务操作方式。我们
知道,在 Linux 系统下,启动一个新的进程必须分配给它独立的地址空 间,建立众多的数
据表来维护它的代码段、堆栈段和数据段,这是一种"昂贵"的多任务工作方式。而运行于一
个进程中的多个线程,它们彼此之间使用相同的地址 空间,共享大部分数据,启动一个线
程所花费的空间远远小于启动一个进程所花费的空间,而且,线程间彼此切换所需的时间也
远远小于进程间切换所需要的时间。
使用多线程的理由2:

线程间方便的通信机制。对不同进程来说,它们具有独立的
数据空间,要进行数据的传递只能通过通信的方式进行,这种方式不仅费时,而且很不方便。
线程则不 然,由于同一进程下的线程之间共享数据空间,所以一个线程的数据可以直接为
其它线程所用,这不仅快捷,而且方便。当然,数据的共享也带来其他一些问题,有 的变
量不能同时被两个线程所修改,有的子程序中声明为 static 的数据更有可能给多线程程序带
来灾难性的打击,这些正是编写多线程程序时最需要注意的地 方。

其他:

(1)提高应用程序响应。这对图形界面的程序尤其有意义,当一个操作耗时很长时,整
个系统都会等待这个操作,此时程序不会响应键盘、鼠标、菜单的操作,而使用多线程技术,
将耗时长的操作( time consuming)置于一个新的线程,可以避免这种尴尬的情况。
(2)使多 CPU 系统更加有效。操作系统会保证当线程数不大于 CPU 数目时,不同的线
程运行于不同的 CPU 上。
(3)改善程序结构。一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半
独立的运行部分,这样的程序会利于理解和修改。

时间: 2024-10-09 23:01:55

Linux下多线程2——多线程的优点的相关文章

Linux下C语言多线程,网络通信简单聊天程序

原文:Linux下C语言多线程,网络通信简单聊天程序 功能描述:程序应用多线程技术,可是实现1对N进行网络通信聊天.但至今没想出合适的退出机制,除了用Ctr+C.出于演示目的,这里采用UNIX域协议(文件系统套接字),程序分为客户端和服务端.应用select函数来实现异步的读写操作. 先说一下服务端:首先先创建套接字,然后绑定,接下进入一个无限循环,用accept函数,接受“连接”请求,然后调用创建线程函数,创造新的线程,进入下一个循环.这样每当有一个新的“连接”被接受都会创建一个新的线程,实现

linux下C语言多线程编程实例

学东西,往往实例才是最让人感兴趣的,老是学基础理论,不动手,感觉没有成就感,呵呵.下面先来一个实例.我们通过创建两个线程来实现对一个数的递加.或许这个实例没有实际运用的价值,但是稍微改动一下,我们就可以用到其他地方去拉.下面是我们的代码: /*thread_example.c : c multiple thread programming in linux *author : falcon *E-mail : [email protected] */ #include <pthread.h>

linux下的多进程,多线程编程

关于多进程和多线程,一直想写点什么来进行一次总结,今天终于提笔了,若有讲解错误之处,希望广大读者能给予指正.,我想从以下几个方面进行一次详解划分.第一,运用.第二,同步.第三,通信.第四,选择. 那么闲话少说,开始第一个,关于线程和进程之间的运用. 什么是进程? 有一个很官方的说法:进程是程序在计算机上的一次执行活动.但我觉得,可能这句话有点不对,应该换成进程加线程是程序在计算机上的一次执行活动才更加的合理.因为进程是资源分配的最小单位,线程是CPU调度的最小单位.所以我们看到进程的时候,应该联

Linux下简单的多线程编程--线程池的实现

/* 写在前面的话: 今天刚“开原”,选择了一篇关于线程池的文件与大家分享,希望能对您学习有所帮助,也希望能与大家共同学习! 选择在这个特殊的时候注册并发文章也是有一些我个人特殊的意义的,看我的id(西游小学生.45)就知道了,哈哈.在这里也很感谢博客园的员工,刚发申请两分钟就同意了. */ 最近由于要写一个类似于QQ的程序,所以想到要用到多线程.既然要用多线程,那何不写一个线程池?于是上网搜了搜多线程的代码,发现大多都不是很完善,或者有些小bug.所以,在这里贴出一个完整的,经过我多重测试的,

linux下C/C++,多线程pthread《转载》

原文网址:http://www.cnblogs.com/xianghang123/archive/2011/08/11/2134927.html ·线程创建 函数原型:int pthread_create(pthread_t *restrict tidp,const pthread_attr_t *restrict attr,void *(*start_rtn)(void),void *restrict arg); 返回值:若是成功建立线程返回0,否则返回错误的编号. 形式参数:pthread_

Linux下c++11多线程聊天室

刚看的c++11多线程,写个聊天室试试编译的时候加上 c++11 和 多线程库g++ -Wall -std=c++0x -pthread -o server server.cppserver 和client 都是 q 退出?1. [代码]server.cpp #include <iostream>#include <thread>#include <arpa/inet.h>#include <cstring>#include <vector>#i

linux下多线程断点下载工具-alex

今天要下载一下14G左右的文件,用wget约10小时,后来发现linux下有个多线程支持断点续传的下载工具alex,试了一下,下载速度大大增加. 包地址:http://pkgs.repoforge.org/axel/ 安装 下载rpm文件并安装: $ wget http://pkgs.repoforge.org/axel/axel-2.4-1.el6.rf.x86_64.rpm $ rpm -i axel-2.4-1.el6.rf.x86_64.rpm 主要参数 -n x:启动x个线程下载 -s

打造百度网盘备份利器:自动备份Linux VPS文件和多线程下载百度网盘资源

前一段时间国内的各大网盘百度云盘,金山快盘,360云盘,华为网盘为争夺用户上演空间容量博弈,网盘商们还固执地以为中国的网民都不懂网络技术,可以像某公司那样用一些数字的手段来忽悠用户,参与到网盘商的数字游戏中的公司都心知肚明. 在不需要增加任何网盘上传下载带宽和硬件设备投入的情况下,又可以用TB级别网盘这样的字眼来夺人眼球,在网络上大肆炒作一番,这比用钱买广告来推广网盘有效得多了.在这场网盘炒作中,率先“挑起事非”的两家百度网盘和360网盘获利最多. 尤其是百度网盘,应该算正式成长为国内网盘界中老

socket在windows下和linux下的区别

windows到Linux代码移植遇到的问题 1.一些常用函数的移植 http://www.vckbase.com/document/viewdoc/?id=1586 2.网络 ------ 转载 & 修改(待整理) socket相关程序从windows移植到linux下需要注意的 1)头文件 windows下winsock.h/winsock2.h linux下sys/socket.h 错误处理:errno.h 2)初始化 windows下需要用WSAStartup linux下不需要 3)关

linux下将不同线程绑定到不同core和cpu上——pthread_setaffinity_np

=============================================================== linux下的单进程多线程的程序,要实现每个线程平均分配到多核cpu,主要有2个方法 1:利用linux系统自己的线程切换机制,linux有一个服务叫做irqbalance,这个服务是linux系统自带的,默认会启动,这个服务的作用就是把多线程平均分配到CPU的每个核上面,只要这个服务不停止,多线程分配就可以自己实现.但是要注意,如果线程函数内部的有某个循环,且该循环内