漫谈消息队列
消息队列 今天电话面试,被问及,为什么你框架设计都是用线程创建,不用进程。我说产品比较简单,没必要做那么多。现在想想这样的回答的确肤浅。 在聊进程间通讯前,先说下选用进程和线程的规章, 进程与线程的选择取决以下几点: 1、需要频繁创建销毁的优先使用线程;因为对进程来说创建和销毁一个进程代价是很大的。 2、线程的切换速度快,所以在需要大量计算,切换频繁时用线程,还有耗时的操作使用线程可提高应用程序的响应 3、因为对CPU系统的效率使用上线程更占优,所以多机分布的用进程,多核分布用线程; 4、并行操作时使用线程,如C/S架构的服务器端并发线程响应用户的请求; 5、需要更稳定安全时,适合选择进程;需要速度时,选择线程更好。 说白了就是:进程是独立堆栈,开销大。线程共享,响应快。由于线程共享,一个线程挂了,进程就挂了。进程独立,所以互不影响。**总结就是第五点:** 需要更稳定安全时,适合选择进程;需要速度时,选择线程更好 那么既然是进程,那么进程间如何通讯呢? 进程通信有好多方式:管道,共享内存,消息队列,信号,套接字。 这里说下消息队列,这个是系统维护的IPC,也就说这是系统方法,不需要用户维护,可以理解成工具。 先说几个标准函数: ftok函数: key_t ftok(const char *pathname, int proj_id); 功能:生成一个key(键值),唯一的。 参数