LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: snowsun

一个多线程程序,为什么从结果上看不到两个线程是并行执行的?

[复制链接]
发表于 2006-7-30 23:07:46 | 显示全部楼层
时间片的问题吧。
回复 支持 反对

使用道具 举报

发表于 2006-7-31 09:47:20 | 显示全部楼层

:)

Post by fzhyeale
取得当前进程的进程号


谢谢fzhyeale的回答,其事我是在问楼主啦,在线程中打印pid有什么意义嘛!?


楼主用的是2.6的内核!??
回复 支持 反对

使用道具 举报

发表于 2006-7-31 09:49:57 | 显示全部楼层

不理解

Post by windwiny
如果不加 sleep(1) 的话,把循环次数 改大一些,如300000,
再输出到文件,查看,可以看到有变化输出。

总感觉 LINUX 的线程还是比 WIN 的线程 “大” 。



没有搞过windows的纯程,对其内部也不怎么了解,

不理解什么叫大
回复 支持 反对

使用道具 举报

发表于 2006-7-31 19:05:08 | 显示全部楼层
总感觉 LINUX 的线程还是比 WIN 的线程 “大” 。

大说的是时间片比较长,WIN的 线程调度 时间片 好像是 20ms, LINUX的不知道。。。
找了一下POSIX线程的资料,说的是 进程 的动态优先级是一次调度循环结束后才修改的,
线程的不知道。。。

刚学 LINUX 编程,什么都不清不楚的
回复 支持 反对

使用道具 举报

发表于 2006-7-31 19:59:16 | 显示全部楼层
win运行是按进程分配执行句柄的。如果是多线程,则进程中只有一个线程可以获得执行句柄。
linux我没有查过,不过似乎是按照线程分配句柄的。因为上次我做的一个程序,忘了sleep,在linux下一点问题都没有,win下面另一个线程就断断续续的。
回复 支持 反对

使用道具 举报

发表于 2006-7-31 22:32:16 | 显示全部楼层
Post by windwiny
大说的是时间片比较长,WIN的 线程调度 时间片 好像是 20ms, LINUX的不知道。。。
找了一下POSIX线程的资料,说的是 进程 的动态优先级是一次调度循环结束后才修改的,
线程的不知道。。。

刚学 LINUX 编程,什么都不清不楚的



你是意思是说在相同优先级的情况下,最长20ms内,线程都会有一次执行的机会!!?

是这相意思嘛!!
回复 支持 反对

使用道具 举报

发表于 2006-7-31 22:37:40 | 显示全部楼层
Post by mrkissinger
win运行是按进程分配执行句柄的。如果是多线程,则进程中只有一个线程可以获得执行句柄。
linux我没有查过,不过似乎是按照线程分配句柄的。因为上次我做的一个程序,忘了sleep,在linux下一点问题都没有,win下面另一个线程就断断续续的。



对linux的进程调度不是很了解,多问几句了!!

感觉好像不是,linux中的线程常有人说是叫"轻量级进程"也是就是他们没有什么实质上的区别,

在2.6,好像每个线程都做为一个单独的进程,有一个唯一的pid

这好像与windows上的不同,在同一批创建的线程都有相同的机会获得时间片.

听一些朋友说,windows上的线程需要人为的加一些暂停的操作,就像sleep等.
回复 支持 反对

使用道具 举报

发表于 2006-8-1 00:48:45 | 显示全部楼层
。。。。还是错了

sleep() 是进程相关的,一个线程调用它以后,整个进程被休眠了,要使用 pthread_delay_np()
回复 支持 反对

使用道具 举报

发表于 2006-8-1 21:50:40 | 显示全部楼层
Post by windwiny
。。。。还是错了

sleep() 是进程相关的,一个线程调用它以后,整个进程被休眠了,要使用 pthread_delay_np()

sleep究竟是sleep进程还是线程,是跟系统相关的,POSIX标准好像没有指明(??)。至少在我测试过的几个linux上面,它是针对线程的。
另外pthread_delay_np好像不是POSIX标准中的。
我暂停线程的话,都是用pthread_cond_timedwait以保证其兼容性。
不好意思,离题了:%
回复 支持 反对

使用道具 举报

发表于 2006-8-1 22:40:21 | 显示全部楼层
Post by windwiny
。。。。还是错了

sleep() 是进程相关的,一个线程调用它以后,整个进程被休眠了,要使用 pthread_delay_np()


照这个意思来说,windows中的线程中使用sleep好像也没太大意义了!!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表