工厂类回收资源和夸线程回调时对象是否还存在判断
虽然大多数逻辑都在单线程里实现, 但是不能避免的是一些IO阻塞类型逻辑, 不得不放入子线程里执行,当IO完成后boost:bind(callback, arg1, arg2 ...) 放入主线程队列内执行callback, 但是问题是,假如callback指向的对象函数的对象, 已经销毁了, 这时候就无法判断对象是否还存在了,不判断就会core dump.
继续阅读 »
一个单线程的epoll server示例
这个示例是一个echo server, 将回显client端send的64字节.
代码在 echoEpollServer
在OSX下 gcc 4.6, linux 下编译可用, 默认被写死了监听8886端口.
继续阅读 »
背景
在如今的大数据时代,多核 cpu 的发展,如何利用多核,提升计算能力,成为程序开发中一个很重要的话题。随之衍生了专为多核而生的语言,比如说 Golang 和 Erlang 。曾浮光掠影的看过 Golang 的多核编程,关于它的取得 cpu 核数,背后的概念而感叹。而 Csharp 作为一个一直走在时代前沿的语言,在 .NET 4.0 后引入了 System.Threading.Tasks 提供了对多核的支持。
继续阅读 »
也许你会偶然发现Python的多线程程序使用Ctrl-C杀不掉,必须拿到pid用kill -9才能干掉,研究这个问题的原因可以使得对Python多线程的信号处理及线程的退出机制有更好的理解。
假如有一个Python写成的用多线程模拟生产者-消费者的程序,代码如下:
class Producer(threading.Thread):
def run(self):
global count
while True:
if cond.acquire():
if count > 1000:
cond.wa
继续阅读 »
写Python多线程都知道当前线程调用a.join()后,会阻塞直到线程a运行结束,看了一下threading模块的源码,
了解了一下实现的原理。
每一个新开启的线程内部都维护着一个Condition类型的条件变量,对线程a进行join(),其实是wait()在线程a
内部的条件变量上,当线程a执行结束时,会通过notify_all()通知所有join()的线程,则阻塞的线程被唤醒,恢复执行。
以下是源码:
self.__block = Condition(Lock()) #线程内部维护的Contition变量
def __stop(self):
if not hasattr(self, '_Thread__block
继续阅读 »