关于多线程同步的问题

腊肠弟弟 2013-08-16 12:45:05
要写一个程序对文件进行读取然后计算,想用多线程实现,有一个问题,假如我的CPU是单核的,我用一个线程来进行读文件,也就是I/O操作,那么同时我可以用另一个线程进行ALU操作吗,意思也就是我可以把同一个核的资源拆开了同时操作吗?

还有就是有没有什么办法能优化程序的执行时间,我感觉只能从减少文件读取时间这个角度来着手,有没有办法把读取和计算做成一个pipeline,一边读一边计算,但是这么做的前提是要让I/O操作不占用CPU,所谓的内存映射能实现这一功能吗,或者DMA映射呢?
...全文
1284 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
buyong 2014-06-30
  • 打赏
  • 举报
回复
引用 楼主 u011713067 的回复:
要写一个程序对文件进行读取然后计算,想用多线程实现,有一个问题,假如我的CPU是单核的,我用一个线程来进行读文件,也就是I/O操作,那么同时我可以用另一个线程进行ALU操作吗,意思也就是我可以把同一个核的资源拆开了同时操作吗? 还有就是有没有什么办法能优化程序的执行时间,我感觉只能从减少文件读取时间这个角度来着手,有没有办法把读取和计算做成一个pipeline,一边读一边计算,但是这么做的前提是要让I/O操作不占用CPU,所谓的内存映射能实现这一功能吗,或者DMA映射呢?
1. 可以,操作系统会分配时间片给每个进程。 2. 通过设置进程优先级
tzmslxz77 2014-06-29
  • 打赏
  • 举报
回复
linux_mail 2014-06-27
  • 打赏
  • 举报
回复
“一个核拆开用”,lz你萌化我了。 首先,线程与进程的区别就是是否共享系统资源。就Liunx的进程调度机制而言,单核CPU对待线程和进程的调度都是通过固定的数据结构(双循链表,红黑树)与调度算法(锁定时间片轮转)来实现,深入到底层而言,并不存在同步。 其次,不知道lz是怎样理解对称与非对称CPU架构,在这里对称CPU架构还是在指每个核的功能和机会都是均等的,而非数目和物理组织上的对称。 最后,优化意味的是空间和时间的取舍,想节省时间,必然从算法入手。在积累大量底层代码经验之前,推荐侧重功能的实现而非代码的精练。 推荐LDD3,和Linux深度剖析,对lz理解底层机制会有帮助。
Carl_CCC 2013-08-22
  • 打赏
  • 举报
回复
内存映射估计不行,对于你的操作的话,应用层,可以减少读取磁盘的操作,每次读数据多读点,可以改善点点。然后就是连续读,不要跳跃读。
小耸 2013-08-16
  • 打赏
  • 举报
回复
让I/O操作不占用CPU,这个是DMA实现的功能。但是在操作系统上编程不能操作到这么底层的东西。
  • 打赏
  • 举报
回复
操作系统会做好线程分配CPU时间的工作,对于应用程序来说,大部分情况下,单核和双核应用程序本身处理效果是一样的(当然如果两个线程使用同一资源且需要独占的话,需要考虑锁之类的问题)。

1,025

社区成员

发帖
与我相关
我的任务
社区描述
Linux /Unix kernel支持不同的硬件体系,X86, ARM, MIPS, 等等
社区管理员
  • CPU和硬件区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧