美文网首页
多线程服务器

多线程服务器

作者: StevenHD | 来源:发表于2020-12-24 13:33 被阅读0次

    一、多线程服务器

    • 线程的入口函数(回调函数)

    把之前子进程中的内容放到线程的入口函数即可

    • 子线程创建成功后,子线程进入入口函数

    (与多进程对比)主线程是不需要关闭clntfd的,因为多线程并没有把fd表复制过来

    • 因为多线程是共享0~4G的内存空间的,那么变量也是共享的(指向的套接字也是同一个),如果关闭了fd,就相当于释放掉了套接字,那么后续就不能进行读写了。

    • 主线程创建线程成功后,也会回到accept()继续等待

    • 子线程退出后,也需要回收线程

    二、回收线程

    • 回收TCB

    • join()会等待子进程退出,因为主线程阻塞在accept()那里,不能再阻塞在join()那里

    • detach()分离态回收线程,让线程自己回收自己

    在入口函数mythread()中设为分离态
    那么主线程(创建子线程,回收子线程)就处理结束了

    三、子线程

    • pthread_create()函数的【最后一个参数】是用来传参的,可以传值也可以传地址

    • 子线程的入口函数要退出的话,不能用exit(),因为exit()会退出整个进程,因此我们使用pthread_exit()

    • 主线程不需要监听SIGCHLD信号

    • 子线程中也有write()的过程,也要处理管道破裂的情况,并且信号是会对进程起作用的,而不是线程

    • 管道破裂SIGPIPE发出后,有一个默认的执行动作,就是让进程挂掉,所以必须要处理SIGPIPE这个信号

    相关文章

      网友评论

          本文标题:多线程服务器

          本文链接:https://www.haomeiwen.com/subject/kwidnktx.html