线程是一个进程的里面的一个执行上下文(执行序列),一个进程可以同时拥有多个执行序列。
我的问题是:线程应该只是宏观上的概念吧?实际计算机执行的话,还是有先后的(单核),所以有了线程管理的问题,那么线程是怎么调度的呢(先不说同步的问题),是一个线程阻塞了(一直有点不明白阻塞的意思,是进行io的时候,外设比较慢,CPU一直在等待的意思么?),另一个优先级高的线程才可以运行?还是有时间片轮转什么的?应该是两者结合吧?多线程的编译是不是和单线程的不一样?

解决方案 »

  1.   

    一直有点不明白阻塞的意思,是进行io的时候,外设比较慢,CPU一直在等待的意思么?
    ---------------
    应该是CPU等待外设完成IO操作。线程的调度是有操作系统的内核完成的。线程是有优先级之分,但不表示高优先级总是运行,而低优先级的总是等待,得不到CPU
      

  2.   

    多线程的编译是不是和单线程的不一样?C里面的一个read函数,会调用系统函数,这里的read函数编译和一般的函数(不涉及系统调用的)是不一样的吧?
      

  3.   

    多线程的编译是不是和单线程的不一样?C里面的一个read函数,会调用系统函数,这里的read函数编译和一般的函数(不涉及系统调用的)是不一样的吧?
    ===========
    链接库是分多线程库和单线程版的。
      

  4.   

    这中东西是操作系统教科书讲的
    你可以去看operating system concepts
      

  5.   

    我说的书是操作系统概念
    http://os-book.com/
      

  6.   

    线程在睡觉的时候,系统把CPU时间调度给了该线程,会如何啊
      

  7.   

    线程在睡觉的时候,系统把CPU时间调度给了该线程,会如何啊
    (信号量实现的睡觉与叫醒)睡觉的那个down应该是个判断循环吧?判断发现还是应该睡觉,然后又继续睡?
    写多线程要先写同步,再写互斥?
      

  8.   

    什么意思,睡觉时就不应该得到cpu,否则就不叫睡觉
      

  9.   

    我说的情况:
    两个线程,一个线程获得锁后阻塞,另一个线程要获得锁,循环等待
    阻塞的那个线程可能是进行IO操作阻塞,所以io完了之后就会变为就绪,所以不会变为死锁吧
    死锁是不是也分:进程内的(线程间),进程之间(系统)?
      

  10.   

    进行io的时候,线程阻塞,要切换线程,这个过程中的系统消耗和锁机制实现带来的消耗(这个不一定有锁,不需要同步的就没锁)与IO阻塞的时间相比差距有多少呢?如果是前者时间花的多或者相等,线程貌似也没有必要了
      

  11.   

    在windows中,如果你的程序是单进程,和其他进程没有来往,同步对象只是在同一进程使用,这时死锁都是同一进程的线程
      

  12.   

    额,再冒昧的问几个问题啊,谢谢啦:关于分页内存管理,主要靠MMU进行地址翻译,我就有个疑惑,操作系统规定了一个地址段给用户程序,这个就是我们分页可用的内存空间,我们写的程序编译完后,地址都是虚拟地址,应该都是从虚拟的0地址开始的么? 那么这样的话,每个程序(也就是进程)在切换后,在低地址的地方不是会经常缺页中断么?
    额,还有,那个驱动 是不是我们预先写好的一系列代码,这些每个代码段 都能完成相应的几部硬件操作(或者响应一种中断,动作?)
      

  13.   

    地址都是虚拟地址,应该都是从虚拟的0地址开始的么
    不是,要看连接器和操作系统,windows中规定小于65536的虚拟地址不能用不是
      

  14.   

    当然有TLB会提高速度,但是缺页中断处理,这个过程蛮长的呀,都涉及到文件系统了
      

  15.   

    页面翻译过程应该跟CPU内部的分页机构密切相关的,书本上只是从逻辑上讲了下这个翻译的过程,正真的过程应该没那么简单吧?
      

  16.   

    有些CPU支持的内存管理不同的话,在编译的时候就要不同了么?那么这种算一个体系么?
      

  17.   

    mmu,操作系统,编译器都提供抽象,让上层的不用管下层的事情,你用编译器,不需要管这些
      

  18.   

    程序和外设之间的信息传送控制方式有程序查询,中断,DMA和通道方式,我们在说的IO阻塞到底什么情况?因为通信方式不同,同步,异步?
      

  19.   

    这个阻塞是针对引发io的线程来说的
    cpu在io开始时挂起线程,在io完成后恢复线程
      

  20.   

    操作系统在io开始时挂起线程,在io完成后恢复线程
      

  21.   

    线程是等待某个对象signal
    操作系统可以为每个对象维护一个等待链表,每当一个线程等待这个对象时,把线程加入到这个对象的等待链表中
    如果对象signal,从这个对象的等待链表中拿出一些线程放到就绪队列
      

  22.   

    某些数据库程序也会用这种raw disk io避免解析文件系统数据结构的开销
      

  23.   

    学过C,接触过C++,学过Java(原先以为比较熟悉,现在觉得还差得远),现在又在学C#,自己有稍微了解了下汇编,计算机其实也就是能做那些算术运算和逻辑运算,一个CPU有它的指令集(我也了解过具体有哪些类型的指令),(指令就是机器代码吧?)汇编的话就是把机器代码用符号表示这个能理解,如果没有操作系统,你规定了从哪个地方开始的话,机器就会读指令,执行指令。----这个是我对计算机的简单理解。那么C的话也还好理解,到了有对象这个概念的程序设计语言,我就有点迷糊了,一会儿是垃圾回收,一会儿是堆啦,栈啦,类是引用类型啦----------------这个编译完后不是指令么