libcurl使用线程的方式做dns解析

缘起:

一个PHP进程本来看不到使用任何的多线程方法,但是,strace时却发现大量的clone调用,而且,ps时,还发现进程状态是Sl 的,随不解,gdb 探查之,发现如下堆栈:

为什么一个简单的域名解析还需要劳驾线程呢?

寻找参考资料:

多线程中使用curl致coredump问题 – 云+社区 – 腾讯云 (tencent.com)

 

对于多线程的环境,libcurl如果使用 SIGALARM 来实现dns的查询超时控制的话,会有问题,所以,会考虑使用线程的方式来实现。

但是,对于PHP这种单线程环境来讲,使用SIGALARM 也没有问题。

libcurl编译时使用 –enable-ares 来避免使用线程做域名解析

 

gzinflate and gzip

 

 

golang 中listener close之后,积压在内核的连接就没法accept了

 

测试实例: