2015/5/4 谈谈进程、线程

        首先说进程,所谓进程就是应用程序执行的过程,就是个抽象说法,而程序就是一个有序指令的集合。初始的进程就叫父进程(PPID),由此派生的就叫子进程(PID)。一个应用程序就能够有多个进程,好比谷歌浏览器,它的进程数就是拓展数加上页面数的总和,它是个多进程程序。 算法

       而线程,是在依附在进程之下的;多线程是将多任务的思想延续到应用程序,因此将一个单独应用程序的具体操做分红具体线程,各线程都能并行运行。例如,火狐浏览器,用的就是多线程模式,其缺点就是一旦某线程内存崩溃,可能会致使整个进程崩溃。
浏览器


多线程的优势: 多线程

无需跨进程边界; 程序逻辑和控制方式简单; 全部线程能够直接共享内存和变量等; 线程方式消耗的总资源比进程方式好; 多线程缺点: 并发

每一个线程与主程序共用地址空间,受限于2GB地址空间; 线程之间的同步和加锁控制比较麻烦; 一个线程的崩溃可能影响到整个程序的稳定性; 到达必定的线程数程度后,即便再增长CPU也没法提升性能,例如Windows Server 2003,大约是1500个左右的线程数就快到极限了(线程堆栈设定为1M),若是设定线程堆栈为2M,还达不到1500个线程总数; 线程可以提升的总性能有限,并且线程多了以后,线程自己的调度也是一个麻烦事儿,须要消耗较多的CPU 性能

 

多进程优势: 大数据

每一个进程互相独立,不影响主程序的稳定性,子进程崩溃不要紧; 经过增长CPU,就能够容易扩充性能; 能够尽可能减小线程加锁/解锁的影响,极大提升性能,就算是线程运行的模块算法效率低也不要紧; 每一个子进程都有2GB地址空间和相关资源,整体可以达到的性能上限很是大 多线程缺点: spa

逻辑控制复杂,须要和主程序交互; 须要跨进程边界,若是有大数据量传送,就不太好,适合小数据量传送、密集运算 多进程调度开销比较大; 最好是多进程和多线程结合,即根据实际的须要,每一个CPU开启一个子进程,这个子进程开启多线程能够为若干同类型的数据进行处理。固然你也能够利用多线程+多CPU+轮询方式来解决问题…… 操作系统

方法和手段是多样的,关键是本身看起来实现方便有可以知足要求,代价也合适。 线程

 

--------------------------------------------------------- 设计

进程的优势:

1)顺序程序的特色:具备封闭性和可再现性;

2)程序的并发执行和资源共享。多道程序设计出现后,实现了程序的并发执行和资源共享,提升了系统的效率和系统的资源利用率。 进程的缺点:

操做系统调度切换多个线程要比切换调度进程在速度上快的多。并且进程间内存没法共享,通信也比较麻烦。

线程之间因为共享进程内存空间,因此交换数据很是方便;在建立或撤消进程时,因为系统都要为之分配和回收资源,致使系统的开销明显大于建立或撤消线程时的开销。    

 

线程的优势:

1)它是一种很是"节俭"的多任务操做方式。在Linux系统下,启动一个新的进程必须分配给它独立的地址空间,创建众多的数据表来维护它的代码段、堆栈段和数据段,这是一种"昂贵"的多任务工做方式。而运行于一个进程中的多个线程,它们彼此之间使用相同的地址空间,共享大部分数据,启动一个线程所花费的空间远远小于启动一个进程所花费的空间,并且,线程间彼此切换所需的时间也远远小于进程间切换所须要的时间。固然,在具体的系统上,这个数据可能会有较大的区别;

2)线程间方便的通讯机制,因为同一进程下的线程之间共享数据空间,因此一个线程的数据能够直接为其它线程所用,这不只快捷,并且方便;

3)使多CPU系统更加有效。操做系统会保证当线程数不大于CPU数目时,不一样的线程运行于不一样的CPU上;

4)改善程序结构。一个既长又复杂的进程能够考虑分为多个线程,成为几个独立或半独立的运行部分,这样的程序会利于理解和修改。 线程的缺点: 1.调度时, 要保存线程状态,频繁调度, 须要占用大量的机时; 2.程序设计上容易出错(线程同步问题)。

相关文章
相关标签/搜索