当前位置: 技术问答>linux和unix
做过多线程的请进!
来源: 互联网 发布时间:2016-12-22
本文导语: 有一个server,要处理很多http request(在处理之前已经将http request的内容存在一个buf中了) 那么现在我要对这个buf进行多线程处理。 (1)如何存储大量的http_request解析得到的内容,用什么数据结构存储大量http request解...
有一个server,要处理很多http request(在处理之前已经将http request的内容存在一个buf中了)
那么现在我要对这个buf进行多线程处理。
(1)如何存储大量的http_request解析得到的内容,用什么数据结构存储大量http request解析得到的内容,效率才能高?
还要考虑处理完一个删一个。
(2)这个多线程怎么做?只需要简单的调用多线程函数吗?有什么要注意的地方吗?我只写过简单的多线程...
(3)在处理过程中,要读取一些文件,这个IO过程可否提高效率?如何提高?
(3)线程安全方面,要使用内存中存储的一些数据,但这些数据只是在收到一个信号之后才会修改它,多线程处理的过程中不修改,这个要考虑线程安全吗?
谢谢!
那么现在我要对这个buf进行多线程处理。
(1)如何存储大量的http_request解析得到的内容,用什么数据结构存储大量http request解析得到的内容,效率才能高?
还要考虑处理完一个删一个。
(2)这个多线程怎么做?只需要简单的调用多线程函数吗?有什么要注意的地方吗?我只写过简单的多线程...
(3)在处理过程中,要读取一些文件,这个IO过程可否提高效率?如何提高?
(3)线程安全方面,要使用内存中存储的一些数据,但这些数据只是在收到一个信号之后才会修改它,多线程处理的过程中不修改,这个要考虑线程安全吗?
谢谢!
|
使用队列。队列头部进行挂载数据,尾部就可以进行处理,处理完就删掉。
多线程操作队列:
可用互斥锁,将队列加锁。保证一个时间只有一个线程在对队列进行操作。
多线程操作队列:
可用互斥锁,将队列加锁。保证一个时间只有一个线程在对队列进行操作。
|
使用线程池技术和抽象线程模型。
线程池:
生成符合你需求的线程个数,比如5个线程,线程调用任务等待函数,等待任务队列中有任务的时候,触发6个线程中的一个线程,抓取这个任务,将任务执行。
抽象线程模型:
抽象的线程,对应多个物理线程。
线程池:
生成符合你需求的线程个数,比如5个线程,线程调用任务等待函数,等待任务队列中有任务的时候,触发6个线程中的一个线程,抓取这个任务,将任务执行。
抽象线程模型:
抽象的线程,对应多个物理线程。
|
其实这是个综合性的问题,包括 多线程处理模型、socket处理模型、线程间同步等。
建议可以参考下一些轻型的web服务器,例如httpd,goahead等的实现原理,重点看处理new socket的方式。
我个人的思路是:来一个new socket,开一个线程,处理完一个请求后,就close掉socket,这是处理短连接基本的思路。
具体采用什么样的模型取决于你应用的逻辑处理、。
建议可以参考下一些轻型的web服务器,例如httpd,goahead等的实现原理,重点看处理new socket的方式。
我个人的思路是:来一个new socket,开一个线程,处理完一个请求后,就close掉socket,这是处理短连接基本的思路。
具体采用什么样的模型取决于你应用的逻辑处理、。