文章插图
一. 在Linux下编程多用多进程编程少用多线程编程
IBM有个家伙做了个测试,发现切换线程context的时候,windows比linux快一倍多 。进出最快的锁(windows2k的 critical section和linux的pthread_mutex),windows比linux的要快五倍左右 。当然这并不是说linux不好,而且在经过实际编程之后,综合来看我觉得linux更适合做high performance server,不过在多线程这个具体的领域内,linux还是稍逊windows一点 。这应该是情有可原的,毕竟unix家族都是从多进程过来的,而 windows从头就是多线程的 。
如果是UNIX/linux环境,采用多线程没必要 。多线程比多进程性能高?误导!应该说,多线程比多进程成本低,但性能更低 。在UNIX环境,多进程调度开销比多线程调度开销,没有显著区别,就是说,UNIX进程调度效率是很高的 。内存消耗方面,二者只差全局数据区,现在内存都很便宜,服务器内存动辄若干G,根本不是问题 。
多进程是立体交通系统,虽然造价高,上坡下坡多耗点油,但是不堵车 。多线程是平面交通系统,造价低,但红绿灯太多,老堵车 。就比如我们都开跑车,油(主频)不是问题,也不怕上坡下坡,但就怕堵车 。
高性能交易服务器中间件,如TUXEDO,都是主张多进程的 。实际测试表明,TUXEDO性能和并发效率是非常高的 。TUXEDO是贝尔实验室的,与UNIX同宗,应该是对UNIX理解最为深刻的,他们的意见应该具有很大的参考意义 。
文章插图
二. 进程
1. 进程的优点
顺序程序的特点:具有封闭性和可再现性;程序的并发执行和资源共享 。多道程序设计出现后,实现了程序的并发执行和资源共享,提高了系统的效率和系统的资源利用率 。
2. 进程的缺点
操作系统调度切换多个线程要比切换调度进程在速度上快的多 。而且进程间内存无法共享,通讯也比较麻烦 。线程之间由于共享进程内存空间,所以交换数据非常方便;在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销 。三. 线程
1. 线程的优点
它是一种非常”节俭”的多任务操作方式 。在Linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这是一种”昂贵”的多任务工作方式 。而运行于一个进程中的多个线程,它们彼此之间使用相同的地址空间,共享大部分数据,启动一个线程所花费的空间远远小于启动一个进程所花费的空间,而且,线程间彼此切换所需的时间也远远小于进程间切换所需要的时间 。当然,在具体的系统上,这个数据可能会有较大的区别;线程间方便的通信机制,由于同一进程下的线程之间共享数据空间,所以一个线程的数据可以直接为其它线程所用,这不仅快捷,而且方便;
【内存模型 多线程和多进程的区别】使多CPU系统更加有效 。操作系统会保证当线程数不大于CPU数目时,不同的线程运行于不同的CPU上;
2. 线程的缺点
调度时, 要保存线程状态,频繁调度, 需要占用大量的机时;程序设计上容易出错(线程同步问题) 。四. 多进程
1. 多进程优点
每个进程互相独立,不影响主程序的稳定性,子进程崩溃没关系;通过增加CPU,就可以容易扩充性能;可以尽量减少线程加锁/解锁的影响,极大提高性能,就算是线程运行的模块算法效率低也没关系;每个子进程都有2GB地址空间和相关资源,总体能够达到的性能上限非常大
- 蒸苹果要蒸多久?蒸苹果的做法与功效 正确蒸苹果的方法蒸多久
- 4500g是多少斤水 4500g是多少斤
- 压力表真空压力表安全阀多久校验一次 压力表安全阀多久校验一次
- {} 越南与中国时间差是多少
- ipad登录微信历史消息 ipad微信同步漏消息
- iphonexr尺寸长宽高 iphonexr尺寸长宽多少厘米
- 求铜的重量 铜的重量是多少怎么算
- 鸟巢能容下多少万人 鸟巢最多能容纳多少人
- {} 小米6屏幕尺寸是多少
- 50g等于多少毫升 50g相当于多少毫升