• 多进程多线程和相关同步机制


    多进程和多线程原理

    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);

  • 相关阅读:
    动手学深度学习 | 单机多卡并行 | 32
    动手学深度学习 | 深度学习硬件:TPU和其他 | 31
    动手学深度学习 | 深度学习硬件:CPU和GPU | 30
    动手学深度学习 | ResNet为什么能训练出1000层的模型 | 28
    过滤器 filter
    JSP
    Servlet之会话 cookie session
    Servlet Response对象
    Servlet Request对象
    Http&Servlet
  • 原文地址:https://www.cnblogs.com/DemonMaster/p/12182218.html
Copyright © 2020-2023  润新知