Linux下同步异步机制以及高性能服务器的相关话题

同步线程与异步线程的比较?(同样适合于同步进程和异步进程)
进程和线程的同步是指:程序的执行顺序完全由代码序列决定。
同步线程的特点:
代码逻辑简单,适合高并发量,但是效率低,实时性差
异步线程的特点:
效率高、实时性强,但是代码逻辑复杂,不易于维护控制,不适合高并发量。
总之,同步线程与异步线程时互补关系。
因此,对于服务器这种需要高并发,实时性好的程序,必须采用线程的同步异步的结合
即,半同步、半异步 


提高服务器性能的其他建议?
------------建议1--------------- 
空间换时间:池的概念
池子是一系列系统资源的集合。
使用池子有什么好处呢?
一般而言,系统资源由系统统一管理(分配或释放)。进程的池子
(一系列系统资源的集合)在进程创建的同时创建好,当进程需要池子中的
资源时,不用访问系统内核来分配系统资源,而是直接从池子中取。同理,当
不使用时,将资源归还到池子中,而不是系统。这避免了对系统内核的频繁访问
因为,系统调用存在开销。


池子中的初始资源数量的分配策略?
1分配足够多的资源。
2分配一定数量的资源,当不够用时,再次从系统中获取一些资源并入池子中。


常见的池子有哪些?
内存池、进程池、线程池、连接池等。进程池和线程池时用于并发编程的伎俩 


进程池和线程池:进程创建之初,我们可以生产出一些列的进程或线程,当服务器
需要某个工作进程或工作线程来处理新到来的客户请求时,就从进程池或者线程池
中选择一个执行实体来处理。而无需频繁使用fork或pthread_create来创建新的工作
进程或线程。当处理完毕,又归还给池子。


连接池:当服务器程序的某些逻辑单元需要频繁使用服务器程序与数据库程序的连接
时,我们可以在进程创建之初,创建一系列的服务器与数据库连接的集合。当某个
逻辑单元需要使用服务器连接数据库时,从连接池中选择一个连接实体使用,使用
完毕又归还到连接池。


------------建议2--------------- 
避免不必要的数据复制:
尤其是内核数据和应用程序代码数据之间的复制。
用户代码之间的数据复制也应避免。比如,工作进程之间的
数据通信,不应该采用管道,消息队列,而应该能使用共享内存
来进行通信,这样可以避免数据的复制。
 
------------建议3--------------- 
充分考虑上下文切换(即工作进程或工作线程的数量不宜过多,
一般而言不能多于CPU的数量)和锁。一般而言,锁适用于
并发环境下对共享资源进行保护的措施。但是,要注意两点:
有条件时,应避免使用锁,即使非要使用锁,也应该尽可能减少
加锁的粒度。


 
 
 


转载于:https://my.oschina.net/u/2467198/blog/618110

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值