线程同步用什么方法最好 C 多线程消息队列?

[更新]
·
·
分类:互联网
3769 阅读

C

C 多线程消息队列?

多线程消息队列?

看什么情况下使用,方法很多。
如果调用频度不高,我做量化分析程序一般是用c 启用python进程,用的pypy速度快点,pypy生成结果到redis或mysql的内存表中,调用结束后c 去redis或mysql的内存表中取出来,你也可以使用文件写入来完成,但文件写入容易出现不同步问题,不想用网络版的,可以用sqlite写入结果,再在另外一个程序用sqlite读取。如果类似互联网业务,可以使用消息队列,消息服务器通信。如果你的程序需要线程安全,需要临界区保护,最好用消息队列这种支持多线程多进程同时访问,消息队列比数据库存储要快,但没有数据库方便。
有个c 版的本机版vedis,高仿redis的嵌入版,你可以用这个初期开发,如果需要切换到redis,很容易修改vedis成redis,ssdb可以把redis落地存储,ssdb是高仿redis的存储版。
如果没有数据存储,可以使用socket通信,或用多进程通信,如chrome是多进程的,通信用的命名管道(Named Pipe),多语言之间调用理论上可以用这个。命名管道要比消息队列快,但需要自己定制。调用方法的协议,可以使用json来完成,这样n多语言都可以通用,如果追求性能可能使用二进制通信协议。
python调用c语言方法也很成熟,但需要自己写一些代码包装一下,需要防止内存泄漏,多线程同步,阻塞,异常等问题。

多进程同步方法与多线程同步方法分别都有哪?

进程是静态的,线程是动态的,这是操作系统实现的在一块静态内存中同时运行多个程序,而每个程序又分成很多部分处理,提高效率,并行只是宏观印象,微观上一切的处理都是串行处理的(单cpu环境下)

利用Thread.wait同步线程,可以设置超时时间吗?

可以,publicfinalvoidwait(longtimeout)throwsInterruptedException在其他线程调用此对象的notify()方法或notifyAll()方法,或者超过指定的时间量前,导致当前线程等待。

异步编程与多线程编程的联系和区别?

网络编程中,同步的意思是说,进行收发数据,等到数据真正发送出去或者接受到,才返回;而异步的意思是,可以把数据发送到缓冲区立即返回,而发送成功的消息是通过事件通知的。
异步可以腾出更多的CPU来处理其他事情,所以异步的方式比较灵活。
线程同步是指,多个线程协同完成一件工作,一个线程需要等待其他线程完成相关的工作,才能接着往下运行。
线程同步一般采用互斥体,信号量,消息等方式。