关于多进程与多线程

  • 1.多进程与多线程的优缺点以及适用情况:

(1)进程:从调度执行角度来说进程时一个正在运行的程序

进程是处于执行期的程序以及它所管理的资源(如打开的文件、挂起的信号、进程状态、地址空间等等)的总称。

注意的是,程序并不是进程,实际上两个或者多个进程不仅有可能执行同一程序,而且还有可能共享地址空间。

 (2)线程:进程内部的一条执行路径,Linux内核并没有现成的概念,线程是通过一个与其他进程共享某个资源的进程来实现的

 从内核的角度来说Linux把所有线程都当作进程来实现

查看某个进程内的线程:ps -ef 只打印进程   ps -elf 打印所有的线程

                     top -H -p 显示某个特定进程线程

 Strace 跟踪系统调用  itrace 跟踪库函数

线程和进程的优缺点适应情况:

进程耗费资源多  开销大  安全 高速    钱多的好车 

线程  造价低  占有资源小  容易堵塞  不安全  很多便宜的小轿车

  • 2.多进程优点:

   每个进程互相独立,不影响主程序的稳定性,子进程崩溃没关系;通过增加CPU,就可以容易扩充性能;

       可以尽量减少线程加锁/解锁的影响,极大提高性能,

   每个子进程都有2GB地址空间和相关资源,总体能够达到的性能上限非常大。

  •    3.多进程缺点:

       逻辑控制复杂,需要和主程序交互;

       需要跨进程边界,如果有大数据量传送,就不太好,适合小数据量传送、密集运算 多进程调度开销比较大;

  •   4. 什么时候使用多进程什么时候使用多线程:

       最好是多进程和多线程结合,即根据实际的需要,每个CPU开启一个子进程,

   这个子进程开启多线程可以为若干同类型的数据进行处理。当然你也可以利用多线程+多CPU+轮询方式来解决问题……

  •   5.多线程的优点:

       无需跨进程边界;

       程序逻辑和控制方式简单;

       所有线程可以直接共享内存和变量等;

       线程方式消耗的总资源比进程方式好。

  •    6.多线程缺点:

       每个线程与主程序共用地址空间,受限于2GB地址空间;

       线程之间的同步和加锁控制比较麻烦;

       一个线程的崩溃可能影响到整个程序的稳定性;

       到达一定的线程数程度后,即使再增加CPU也无法提高性能,

   例如Windows Server 2003,大约是1500个左右的线程数就快到极限了(线程堆栈设定为1M),如果设定线程堆栈为2M,还达不到1500个线程总数;

对32位系统来说,理论上的寻址范围是4G(2^32),但实际系统还要预留系统空间用于自身管理,一般来说真正的最大寻址范围都要小于4G。对于Linux来说,一个进程拥有的用户空间为0~0xBFFFFFFF,共3G,另外1G是内核空间;一个LInux进程在用户态最多访问3G内存,每个线程必须占用特定大小的堆栈空间(stack size),这个因素使32位系统创建的线程数不可能超过n=3G/StackSize 

Windows的到0x7FFFFFFF,只有2G。(32位系统的寻址范围还可以扩大,应用某些扩展标准,例如PAE,最多能支持到16G到64G不等。但这个情况不在我的讨论范围)所以理论上,一个用户进程最大可以分配的内存是2G(实际能用的大约为1.5G),一个线程栈需要预留1M内存空间,那么理论数据:32位电脑最多可以开2*1024/1=2048个线程,即2000个左右线程。线程是好东西,但是不能滥用,因为像在windows系统下,系统是抢占式的,线程多了,系统在线程间切换也要花费非常多时间和资源。

32位机中,最大内存是4G,建一个进程,内核需要占用2G内存,进程本身使用2G。

       线程能够提高的总性能有限,而且线程多了之后,线程本身的调度也是一个麻烦事儿,需要消耗较多的CPU。

  • 6.多线程调试:

(1)gdb main 启动进入调试

(2)谁先碰到断点就切到谁里面

(3)Info  threads  查看有哪些线程可以调试

(4)Thread id选择要调试的线程

(5)Set scheduler-locking[off|on|step]  设置线程运行方法

(6)l+行数 显示第几行

(7)b+行号  第几行加断点

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值