多核CPU下的多线程编程原来是这么回事..._第1页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、多核cpu下的多线程编程原来是这么回事.多线程编程是现代软件技术中很重要的一个环节。要弄懂多线程,这就要牵涉到多进程?固然,要了解到多进程,就要涉及到操作系统。不过大家也没关系张,听我渐渐道来。这其中的环节其实并不复杂。(1)单cpu下的多线程在没有浮现多核cpu之前,我们的计算资源是唯一的。假如系统中有多个任务要处理的话,那么就需要根据某种规章依次调度这些任务举行处理。什么规章呢?可以是一些容易的调度办法,比如说“1)根据优先级调度2)根据fifo调度3)根据时光片调度等等固然,除了cpu资源之外,系统中还有一些其他的资源需要分享,比如说内存、文件、端口、socket等。既然前面说到系统中的

2、资源是有限的,那么猎取这些资源的最小单元体是什么呢,其实就是进程。举个例子来说,在上面每一个享有资源的个体称为task_struct,事实上和我们说的进程是一样的。我们可以看看task_struct(linux 0.11代码)都包括哪些内容,1. struct task_struct 2. /* these are hardcoded - dont touch */3. long state; /* -1 unrunnable, 0 runnable, 0 stopped */4. long counter;5. long priority;6. long signal;7. struct s

3、igaction sigaction32;8. long blocked; /* bitmap of masked signals */9. /* various fields */10. int exit_code;11. unsigned long start_code,end_code,end_data,brk,start_stack;12. long pid,father,pgrp,session,leader;13. unsigned short uid,euid,suid;14. unsigned short gid,egid,sgid;15. long alarm;16. lon

4、g utime,stime,cutime,cstime,start_time;17. unsigned short used_math;18. /* file system info */19. int tty; /* -1 if no tty, so it must be signed */20. unsigned short umask;21. struct m_inode * pwd;22. struct m_inode * root;23. struct m_inode * executable;24. unsigned long close_on_exec;25. struct fi

5、le * filpnr_open;26. /* ldt for this task 0 - zero 1 - cs 2 - ds&ss */27. struct desc_struct ldt3;28. /* tss for this task */29. struct tss_struct tss;30. ;每一个task都有自己的pid,在系统中资源的分配都是根据pid举行处理的。这也就解释,进程的确是资源分配的主体。这时候,可能有伴侣会问了,既然task_struct是资源分配的主体,那为什么又出来thread?为什么系统调度的时候是根据thread调度,而不是根据进程调度呢?缘由其实很

6、容易,进程之间的数据交流十分棘手,由于我们之所以把这些进程分开,不正是希翼它们之间不要互相影响嘛。假设是两个进程之间数据传输,那么需要假如需要对分享数据举行拜访需要哪些步骤呢“1)创建分享内存2)拜访分享内存-系统调用-读取数据3)写入分享内存-系统调用-写入数据要是写个代码,大家可能就更明了了,1. include2. include3.4. int value = 10;5.6. int main(int argc, char* argv)7. 8. int pid = fork();9. if(!pid)10. value = 12;11. return 0;12. 13. printf

7、(value = %dn, value);14. return 1;15. 上面的代码是一个创建子进程的代码,我们发觉打印的value数值还是10。尽管中间创建了子进程,修改了value的数值,但是我们发觉打印下来的数值并没有发生转变,这就解释了不同的进程之间内存上是不分享的。那么,假如修改成thread有什么益处呢?其实最大的益处就是每个thread除了享受单独cpu调度的机会,还能分享每个进程下的全部资源。要是调度的单位是进程,那么每个进程只能干一件事情,但是进程之间是需要互相交互数据的,而进程之间的数据都需要系统调用才干应用,这在无形之中就降低了数据的处理效率。(2)多核cpu下的多线程没有浮现多核之前,我们的cpu事实上是根据某种规章对线程依次举行调度的。在某一个特定的时刻,cpu执行的还是某一个特定的线程。然而,现在有了多核cpu,一切变得不一样了,由于在某一时刻很有可能的确是n个任务在n个核上运行。我们可以编写一个容易的open mp测试一下,假如还是一个核,运行的时光就应当是一样的。1. include2. define max_value 100000003.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论