第5章并发服务器报告.ppt

  1. 1、本文档共35页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第5章并发服务器报告

pthread_key_create函数 #include pthread.h int pthread_key_create(pthread_key_t *key, void (* destructor)(void *value)); 返回值:正常执行后返回0,否则返回错误码 该函数在进程内部分配一个标志TSD的关键字,关键字是进程内部唯一的,所有线程在创建时关键字值是NULL。 key指向创建的关键字;destructor是一个可选的析构函数,用于每个线程终止时调用该析构函数。 pthread_setspecific函数 #include pthread.h int pthread_setspecific(pthread_key_t key, const void *value); 返回值:正常执行后返回0;否则返回正的错误码 该函数为TSD关键字绑定一个与本线程相关的值; void * pthread_getspecific(pthread_key_t key); 返回值:正常执行后返回与调用线程相关的关键字所绑定的值,否则返回NULL。 该函数获得与调用线程相关的关键字所绑定的值。 Pthread_key_delete函数 int pthread_key_delete(pthread_key_t key); 返回值:成功为0,否则为非0; 该函数删除进程内的TSD表示的关键字。该函数既不检查TSD是否有绑定值,也不调用该关键字的析构函数。 pthread_once函数 #include pthread.h int pthread_once(pthread_once_t *once_control, void (*init_routine) (void)) 成功返回0,否则返回错误码 如果本函数中,once_control变量使用的初值为PTHREAD_ONCE_INIT,可保证init_routine()函数在本进程执行序列中仅执行一次。 一般在init_routine函数中完成一些初始化工作。 说明 尽管TSD实现略微有些复杂,但却是将一个非线程安全函数转化为线程安全常用的方法。 另外一种常用的方法是:通过使用函数的参变量来取代静态变量,这种方法虽然简单,但需要改变函数的原型,同时,函数的调用者还需要为这些变量分配相应的空间并初始化。 并发服务器 目录 服务器分类技术 进程与线程 多进程服务器 多线程服务器 并发服务器 服务器分类 按连接类型分类 面向连接的服务器(如tcp) 面向无连接的服务器(如udp) 按处理方式分类 迭代服务器 并发服务器 迭代服务器 vs. 并发服务器 绑定地址 监听连接 接收连接 处理连接 断开连接 接收请求 处理请求 返回响应 绑定地址 监听连接 接收连接 创建子进程 关闭连接套接字 处理连接 关闭连接套接字 终止子进程 关闭监听套接字 服务器主进程 服务器子进程 TCP迭代服务器 TCP并发服务器 “进程”基本概念 进程定义了一个计算的基本单元,可以认为是一个程序的一次运行。它是一个动态实体,是独立的任务。它拥有独立的地址空间、执行堆栈、文件描述符等。 每个进程拥有独立的地址空间,进程间正常情况下,互不影响,一个进程的崩溃不会造成其他进程的崩溃。 当进程间共享某一资源时,需注意两个问题:同步问题和通信问题。 创建进程 #include sys/types.h #include unistd.h pid_t fork(void) 返回:父进程中返回子进程的进程ID, 子进程返回0, -1-出错 fork后,子进程和父进程继续执行fork()函数后的指令。子进程是父进程的副本。子进程拥有父进程的数据空间、堆栈的副本。但父、子进程并不共享这些存储空间部分。如果代码段是只读的,则父子进程共享代码段。如果父子进程同时对同一文件描述字操作,而又没有任何形式的同步,则会出现混乱的状况; 父进程中调用fork之前打开的所有描述字在函数fork返回之后子进程会得到一个副本。fork后,父子进程均需要将自己不使用的描述字关闭。 创建进程(cont.) #include sys/types.h #include unistd.h pid_t vfork(void); 该系统调用基本上与fork相同,在BSD3.0中开始出现,主要为了解决fork昂贵的开销。 两者的基本区别在于当使用vfork()创建新进程时,父进程将被暂时阻塞,而子进程则可以借用父进程的地址空间,直到子进程退出,至此父进程才继续执行。 终止进程 进程的终止存在两个可能: 父进程先于子进程终止(init进程领养) 子进程先于主进程终止 对于后者,系统

文档评论(0)

ee88870 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档