线程 & 线程与fork & 线程的大小

线程的定义:

           线程是进程中的一个执行序列

Linux与Windows上线程的区别:

           Linux操作系统实现线程的机制比较的特殊,从内核的角度来讲,Linux上把所有的线程都当做进程来实现,内核中没有特别的准备调度算法和数据结构来表征线程,相反,线程仅仅被视为一个与其他进程共享某些资源的进程,每个线程都拥有自己唯一的task_struct(PCB),所以在内核中他就像是一个普通的进程,只是和其他进程共享某些资源,如地址空间等

           Windows上为线程提供了专门的机制用来支持线程,因此在Windows上也把线程称为 轻量级的进程,这种叫法本身就包含了Linux上线程与其他操作系统上线程的区别, 相比于重量级的进程,线程被抽象为一种耗费较少资源,迅速运行的执行单元. 但对于Linux其本身的进程相比而言已经很"轻"了;

线程同步的几个方法:

          信号量             互斥锁              条件变量(实现要依赖于互斥锁)                读写锁

线程安全:

          安全即保证线程能正确的运行出结果

          实现线程安全的两个点:  1. 要注意线程同步

                                                 2.要使用线程安全的函数,例如strtok和strtok_r

                                                    strtok函数的实现中可能有全局变量或者静态变量来标识切割位置,不是一个线程安全的函数

几种线程的实现方式:

如图:

     

  这三种方式中:  

       1.纯粹的用户级里线程的创建是由线程库来完成的,因此在内核不参与这个过程,也就意味着内核不知道有线程的存在,它只能管理进程,因此,当程序在多处理机上运行时,无法实现多线程的并行处理,主要是内核不知道线程的信息,无法管理.

       2.纯粹的内核级里内核正好是可以对线程进行控制的,因此在多处理机上可以实现线程的并行,但是这样对内核来讲多了一些工作量

       3.组合型是将前两种的一个集合

 

线程的大小:

           1.一个程序的运行的线程数和    线程栈的大小      总进程数    等原因的限制:

                ulimit  -a  这个命令可以看到系统中各个限制条件,例如,最多运行的进程数,一个线程的线程栈的大小

                ulimit   -s   5120 在此终端上将线程的线程栈设置为5120大小

                ulimit   -u   2048 在此终端上将最大进程数设置为2048

线程与fork:

           1. 多线程执行 fork:

                   父进程的有多个线程,fork出的子进程只启用一个线程的执行路径,在那个线程内调用fork就跟随哪条路径

          2. 多线程中使用 锁 ,fork在进行fork时会得到属于自己的锁,和父进程的独立,但是会受到之前锁的状态的影响,因此注意使用

              pthread_atfork();  这个函数

知识扩充:

          1.   strace 命令可以跟踪程序执行中系统调用函数的使用

          2.   ltrace  命令可以跟踪程序执行中库函数的调用 

          3.   ps  -eLf  | grep   run    命令可以过滤出run进程中的线程信息,并且显示

          4.  fork   vfork   clone   的底层实现都是依靠  do_fork函数

          5. 掌握多线程的调试方法

思考:

         1. 主函数执行之前打印  "hello wold"怎么做到?

         2. 主函数执行完后打印  "hello wold"怎么做到?

         3, 一个进程可以创建多少个线程,限制条件是什么?

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值