zoukankan      html  css  js  c++  java
  • 多进程多线程和相关同步机制

    多进程和多线程原理

    fork后子进程会复制父进程的task_struct结构,并为子进程的堆栈分配物理页。理论上来说,子进程应该完整的复制父进程的堆栈以及数据空间,但是2者共享正文段。
    由于一般fork后面都结着exec,所以现在的fork都在用写时复制的技术,顾明思议,就是数据段,堆栈一开始并不复制,由父子进程共享,并将这些内存设置为只读。
    直到父子进程一方尝试写这些区域,则内核才为需要修改的那片内存拷贝副本。这样做可以提高fork的效率。
    
    从内核的观点看,进程的目的就是担当分配系统资源的的基本单位。线程是进程的一个执行流,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。
    
    线程它们彼此之间使用相同的地址空间,共享大部分数据,启动一个线程所花费的空间远远小于启动一个进程所花费的空间,而且,线程间彼此切换所需要的时间也远远小于
    进程间切换所需要的时间。据统计,总的来说,一个进程的开销大约是一个线程开销的30倍左右,当然,在具体的系统上,这个数据可能会有较大的区别。
    

    通讯方式

    进程间传递数据只能通过通讯的方式,既费时又不方便。线程数据大部分共享(线程函数内部不共享)快捷方便。但是数据同步需要加锁,static变量尤其注意
    

    线程的创建使用和消除
    创建:temp = pthread_create(&thread[0], NULL, thread1, NULL)
    成功返回 0
    注销:pthread_exit(NULL);
    等待线程结束:pthread_join(thread[0],NULL);

  • 相关阅读:
    html 上传图片前预览
    php获取当月天数及当月第一天及最后一天、上月第一天及最后一天实现方法
    php 计算 pdf文件页数
    php 获取半年内每个月的订单数量, 总价, 月份
    php 获取两个数组之间不同的值
    小程序支付功能
    关于nginx的Job for nginx.service failed because the control process exited with error code.错误
    linux 安装 Apollo
    MongoDB待续。。。
    ABP vNext...待续
  • 原文地址:https://www.cnblogs.com/DemonMaster/p/12182218.html
Copyright © 2011-2022 走看看