使用fork函数创建新进程时,子进程会复制父进程的所有资源,包括程序代码、数据、堆栈等,然后在子进程中执行从fork函数开始的下一条语句。由于子进程与父进程是完全独立的,它们可以同时执行不同的任务,这就可以实现多进程并发。
使用vfork函数时,子进程并不会复制父进程的资源,而是与父进程共享同一块地址空间,直到子进程调用了exec或exit函数。因此,vfork函数比fork函数更加高效,但也更加危险,因为子进程可能会改变父进程的资源。
无论是使用fork还是vfork函数,都需要仔细设计进程之间的通信方式,以确保进程能够正确地协作工作,并避免竞争条件和死锁等问题。50-100并发,如果是网站的话,数量就很少,用单路四核的配置就可以了。如果是做erp,oa软件之类的,至少得用双路四核SAS硬盘的才可以。
你可以看看国产品牌正睿的这款双路四核服务器。标配一颗至强E5506四核处理器,英特尔5500服务器芯片组主板,2G DDR3 REG ECC 1333MHz内存,SAS 300G 15000转/分钟企业级硬盘,双千兆网卡,性能可以说是非常不错。如果以后随着业务量的增长,觉得性能不够用了,还可以扩展到两颗处理器,达成8颗处理核心,最大支持24GB DDR3 REG ECC高速容错校验内存。
产品型号:I247789S-E
产品类型:双路四核塔式服务器
处 理 器:Xeon E5506
内 存:2G DDR3 REG ECC
硬 盘:SAS 300G
机 构:塔式
价 格:¥7999
购买即赠 《200元电子正睿券》
银牌服务
重庆五年免费上门服务,全国三年免费上门服务,关键部件三年以上免费质保。
给你推荐的是国产品牌正睿的服务器产品,他们的产品性价比很高,做工很专业,兼容性,质量之类的都有保障,售后也很完善,3年免费质保,3年免费上门服务,在业界口碑很不错。
创建多个线程就可以了,最长用的方法有:
创建类,实现Runnable 接口,重写run方法;
继承Thread 类,重写run方法。
使用线程池。
具体比较麻烦,你查api
给你一个简单的例子看看。
package DuoXianCheng;
public class ThreadText {
public static void main(String[] args) throws Exception {
Runnable rb=new ThreadText()new Thread2();
Thread t3=new Thread(rb,"旺财");
Thread t1=new Thread(rb,"小强");
t1start();
t3start();
}
public class Thread2 implements Runnable{
public void run(){
while(true){
try {
Threadsleep(2000);
Systemoutprintln("当前线程名称:"+ThreadcurrentThread()getName()+"");
} catch (InterruptedException e) {
eprintStackTrace();
}
}
}
};
}
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理解最为深刻的,他们的意见应该具有很大的参考意义。
多线程的优点:
无需跨进程边界;
程序逻辑和控制方式简单;
所有线程可以直接共享内存和变量等;
线程方式消耗的总资源比进程方式好;
多线程缺点:
每个线程与主程序共用地址空间,受限于2GB地址空间;
线程之间的同步和加锁控制比较麻烦;
一个线程的崩溃可能影响到整个程序的稳定性;
到达一定的线程数程度后,即使再增加CPU也无法提高性能,例如Windows Server 2003,大约是1500个左右的线程数就快到极限了(线程堆栈设定为1M),如果设定线程堆栈为2M,还达不到1500个线程总数;
线程能够提高的总性能有限,而且线程多了之后,线程本身的调度也是一个麻烦事儿,需要消耗较多的CPU
多进程优点:
每个进程互相独立,不影响主程序的稳定性,子进程崩溃没关系;
通过增加CPU,就可以容易扩充性能;
可以尽量减少线程加锁/解锁的影响,极大提高性能,就算是线程运行的模块算法效率低也没关系;
每个子进程都有2GB地址空间和相关资源,总体能够达到的性能上限非常大
多线程缺点:
逻辑控制复杂,需要和主程序交互;
需要跨进程边界,如果有大数据量传送,就不太好,适合小数据量传送、密集运算
多进程调度开销比较大;
最好是多进程和多线程结合,即根据实际的需要,每个CPU开启一个子进程,这个子进程开启多线程可以为若干同类型的数据进行处理。当然你也可以利用多线程+多CPU+轮询方式来解决问题……
方法和手段是多样的,关键是自己看起来实现方便有能够满足要求,代价也合适。
尽可能的使用html,静态页面去完成。 环境上,可以使用nginx+apache+php+mysql 组合。目前大型网站基本都是使用php语言去写。 数据库需要专业优化结果,做好字段索引等 服务器带宽上,也需要非常高的要求。这个不是一下子都能说清楚的。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)