1、windows下多线程创建机制:
参考博客:http://www.jb51.net/os/windows/121172.html
进程:系统进行资源分配和调度的一个独立单位
线程:进程的一个实体,CPU调度和分派的基本单位
windows下进程线程创建:
1)打开在该进程中执行的映像文件
2)创建执行体进程对象
3)创建初始线程
4)通知系统新进程创建了
5)开始执行初始线程
6)在新进程和线程环境中完成地址空间的初始化,然后开始到进程入口执行
2、Linux下的多线程机制:
参考博客:http://www.ibm.com/developerworks/cn/linux/kernel/l-thread/
介绍比较古老了,但是原理可以学习
__pthread_handles数组结构:线程存储
__pthread_main_thread链表:创建释放线程
创建管理线程:
pthread_create-->__pthread_initialize_manager-->__clone()-->__pthread_manager()
管理线程栈:THREAD_MANAGER_STACK_SIZE大小作为自己的运行栈
用户线程栈:i386:
(1)FLOATING_STACK:mmap()分配8MB,mprotect()设置其中第一页为非访问区
(2)用户自定义栈:按照指针对界后,设置线程栈顶,计算栈底,不做保护
每个线程同时具有线程ID和进程ID
第n个用户线程的线程id遵循公式:
tid=n*PTHREAD_THREADS_MAX+n+1
保证了所有线程不会有相同的线程id
线程创建:
pthread_create向管理线程发送REQ_CREATE请求
管理线程调用pthread_handle_create()创建新线程
分配栈、设置thread属性
以pthread_start_thread()为函数入口,调用__clone()创建并启动新线程
pthread_start_thread():读取自身进程ID存入线程描述结构中,并根据其中记录的调度方法配置调度,一切准备就绪之后,再调用真正的线程执行函数,并在此函数返回后调用pthread_exit()
3、网页正文提取相关的博客,用于搜索引擎开发:
libcurl和网页正文提取:
http://wenku.baidu.com/link?url=1AhrFLpAqKY0lqA9Tn0LMBHEUifA4kkqL0t62jF-XMxbGytPp66fEscfYqsE6S5HTOgPMRm9OIeKXNTjwWndKlKZNXLgh5CbFwGni26vuNi
http://blog.csdn.net/zvane/article/details/2201414
http://blog.csdn.net/zhoubl668/article/details/7416746
http://www.baidu.com/link?url=TzI_48rG8y4QQk87F5NNjBgEuSyDlqK4z6FuLzuZ5YekTNLNQysUbjfRSQOTPKTBG32ZxMiO6rKCersZlooo4a
http://www.lupaworld.com/portal.php?mod=view&aid=234808&page=all
http://blog.csdn.net/zzxian/article/details/6748177