- 主题:这种多线程需求如何设计?
把getdata放到外边去,ab作为参数传进来。
然后并行myfun。用线程池,线程数=核数。一个线程getdata,发送到myfun线程池。
【 在 capriccio 的大作中提到: 】
: 伪代码如下:
: myfun()
: {
: ...................
--
修改:ylh0315 FROM 221.221.53.*
FROM 221.221.53.*
分配线程每批读1000组ab,发到myfunc线程池的一个线程,这个线程串行的调用1000次myfunc。
再读1000组分配给下一个线程。线程都满了等待。谁干完了唤醒分配器再次取得数据。这样可以减小线程切换开销。
1000组切换一次。
批量数可以通过配置文件设定,试试多大批量速度最快。
【 在 KillnCov 的大作中提到: 】
: 你需要重构你的代码。
: 多线程远远没有你想的这么简单。线程的创建 删除 同步 切换都需要消耗大量的时间。
: 反正你的这种写法肯定不对上。300毫秒的时间,线程本身上消耗都要占用好多。
--
修改:ylh0315 FROM 221.221.53.*
FROM 221.221.53.*
我写了个中间件就是干这种事。数据源和处理函数作为你自己的插件插进来。
插件有标准接口。工作内容你随便。
【 在 ylh0315 的大作中提到: 】
: 分配线程每批读1000组ab,发到myfunc线程池的一个线程,这个线程串行的调用1000次myfunc。
: 再读1000组分配给下一个线程。线程都满了等待。谁干完了唤醒分配器再次取得数据。这样可以减小线程切换开销。
: 1000组切换一次。
: ...................
--
FROM 221.221.53.*
Linux线程调度是3~7微秒。
【 在 dormouseBHU 的大作中提到: 】
: 如何做到每秒运行4000次?就算是个空函数每秒执行4000次也不那么好实现吧?win和linux都不是实时系统,随便任务调度一下几十毫秒就没了。
:
--
FROM 221.221.53.*
按楼上方法,getdata每秒4000次没问题。
get后提交给后面的服务器批量处理,发送后不管。
后台服务器总吞吐量够就行。
并行处理的结果是失序。这需要为每组数据加上时间戳,数据库以时间戳为序建立索引,按索引序处理
【 在 capriccio 的大作中提到: 】
: 伪代码如下:
: myfun()
: {
: ...................
--
修改:ylh0315 FROM 221.221.53.*
FROM 221.221.53.*
我估计3不行,必须等ab全部完成。
跟下一轮ab同时没问题。
但是c开销不大。
【 在 ex2 的大作中提到: 】
: 请问下几个细节
: 1. funA funB 之间是否共享数据(任何方式)?
: 2. funA funB 在每一轮中最后需要等待b\d都得出结果,
: ...................
--
修改:ylh0315 FROM 221.221.52.*
FROM 221.221.52.*
start: getdata
send to A thread
send to B thread
wait A,B
send to C thread
GOTO start
A,B,C thread 一直在线,通过线程间通信传递数据和信号。
【 在 capriccio 的大作中提到: 】
: 伪代码如下:
: myfun()
: {
: ...................
--
修改:ylh0315 FROM 221.221.48.*
FROM 221.221.48.*