各位大侠,因为小弟工作的需要,开发一个小灵通发送短消息的服务程序,可是该程序的CPU利用率太高,达到95%以上,如此服务器响应其它程序的速度慢了很多,该如何解决,小弟还不是很清楚,请各位大侠指教,一当问题解决,小弟送上100分。
系统说明:
  该系统采用多个线程操作,主要有三种类型:取短消息线程,发送消息线程,数据库操作线程。
  如果每种类型的线程有多个实例,CPU占用率将会更高,该如何解决?

解决方案 »

  1.   

    线程得多个实例、每个实例的内部,都可以使用sleep来将cpu时间交付给其他程序使用
      

  2.   

    Sleep(10)就可以了因为发短消息不是实时系统,也不需要很快的响应,等待毫秒级是不影响的
    但CUP就可以空闲很多了
      

  3.   

    单纯的Sleep并不好。我不清楚,读写短消息的方式,在异步的情况下,一般都会有三种方式进行同步,一个是消息、一个是回调函数、一个是事件,通常开发库都应该提供这三种方式之一或者全部来同步异步操作。在这种情况下,你的线呈不需要轮询,而是应该进入等待状态,标准的是WaitMessage或者MSgWaitObject...或者WaitForSingl....之类的API进入等待,这时候CPU控制权被释放,而且响应效率很高。如果是回调函数同步,通常的解决办法是你自己创建一个同步事件,在回调函数中使能这个事件,在线程中等待这个事件,执行回调函数的线程不会是调用线程。如果你的开发库没有提供任何的同步方式,那么一般来说,他不会提供异步调用,他只会提供同步调用。否则,建议你换一个开发库。数据库的操作不会有任何问题,我相信这一点,他们都封装成了同步操作,如果你想效率高一些,用异步操作,也完全可以,但是需要你对使用引擎有比较深入的了解。事实上,任何操作在异步的情况下都可以得到上述三种方式的同步,要么就是不提供异步操作,因为windows的驱动接口就是这个样子的。