分享

我所了解的多线程

 happy害虫 2014-02-24
        本人突发奇想,想写写本人学习多线程的一些经历(从完全不懂多线程基础为0),哪里写的不对还望各位看官批评指正,小的感激不尽!
        从我接触编程一直到听过多线程,我所了解的多线程是这样子滴,一个后缀为.exe的程序称之为可执行文件,双击运行载入内存之后为一个进程,一个进程都由系统分配一个主线程,没有主线程的程序就像没有生命的人,在一个主线程里可以创建多个子线程用于分担主线程执行那些需要处理等待的事件,提高运行效率。
        那到底什么是线程了,我举个例子加以说明,例如某人正在办公室写文件,外面有人敲门(这样中止正在执行的程序,在程序中称之为“中断”),她必然会暂时中止手里的事,前去开门处理,然后回来接着写文件,设想办公室还有个秘书什么滴,那正在写文件的某人是不是就不需要被打断继续写,由秘书去开门。在程序中多线程的功能就和那秘书差不多,就是说秘书相当于一个子线程,写文件的某人就是主线程!
       1、设想这样子线程是否需要共享主线程里所存在的资源,是完全共享还是受限制的共享?
       2、 当多个子线程访问同样的资源是否会起冲突?
       3、如果会起冲突,那是不是需要对访问的资源上锁(表示我正在处理这些数据,你们等我处理完了再来!),但这样会不会出现死锁的情况,如果出现该怎么解决?
       多线程中线程对应现在市场上流行的多核处理器也就是CPU的一个核,现在的许多应用程序,软件都还是单线程的,这也就造成了,为什么明明用的是4核处理器的手机上面运行软件感觉和原来单核的运行效率差不多了。试想单线程的程序在拥有4个核的CPU上运行,它不会在4个核之间进行切换,因为那样是没有意义的。这也就是是说会造成极大的浪费。
      在说如果是多线程的程序在单核CPU上运行,那怎么处理多线程了,这要说道CPU的时间片(也就是CPU分配给各个程序执行的时间)。CPU通过假并行(同一时间处理不同的事情称之为并行),在CPU时间片快速的切换,当然这个切换时间是很短的几乎感觉不到,就像是真的并行一样但实际上不是。
     那么怎么利用多核CPU达到最佳效果,是不是线程越多越好呢,事实上不是的,因为线程越多越加不好管理,而且每当程序运行时创建一个线程操作系统会为线程分配一个大小为1M的空间(默认,可修改),现在的电脑就拿我的举个例子,我的电脑一共有4个G内存,其中操作系统要占去2个G,其中应用程序还要占去一些,在程序里通过循环创建线程不到2000个线程就把内存占完了。从这一点也能看出来其实多线程就是在通过牺牲空间来提高效率。对于我们程序员来说在编写程序的时候心里一点要有两杆称,一个是要占用最小的空间,最快的执行效果这样的才算优秀程序员,跑题了...... 而且线程与线程之间也像一个公司里的员工之间一样会闹矛盾,并且还会出现相互之间占着数据不让位置让整个程序耗在哪里,这一点我以后再加以说明。
    怎么才能对多核CPU达到最佳利用了,windows系统提供了一个接口,可以查看电脑CPU的核数,一般来说CPU有几个核就创建几个线程,当然这不是最佳利用了,再看你所设计的程序里,有几个含有I/O的线程,因为在等待用户输入的过程中那个线程是处于空闲状态,不知道用户何时输入,线程会一直等待直到用户输入或程序结束,此时CPU的时间片也是空闲的,就可以在多建个线程,综上所说的如果我的CPU是4核,其中2个线程含有I/O 那就创建6个线程,我的CPU是2核,其中有一个线程含有I/O就创建3个线程。
    多核CPU上运行多线程,2个线程在不同核上各干各的互不影响,称之为并行或并发。
   只想到这些了,这是本人第一次接触多线程所学到的,以上全是我自己的理解也许有不对的地方还望批评指正,今后我还会在此馆分享,不限于理论,具体代码也会有当然不会抄袭别人的代码那样也就失去初衷了 !也希望能对此馆的读者有所启发那就更好了,更希望大神莅临指导!

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多