zoukankan      html  css  js  c++  java
  • core--线程池

    对于服务器-客户端这种架构的软件,通常客户端的数据来自于服务器,如何让一个服务器进程,来满足多个客户端程序的数据请求?一种简单的方法就是,每当一个客户请求来领,服务器就为该客户端创建一个线程。当有100个客户端请求,服务器就应该有100个数据结构分别管理每一个线程。通常服务器还要为每个客户端如何分配,哪个客户端发多少数据进行动态的调整。这是一个非常复杂的工作。好的是,windows为我们提供了一个这种问题的解决方案--线程池

    线程池编程,只需要关心任务本身,而不需要去创建,管理,销毁线程。为了便于理解,我们的可以将我们编程的线程代码当做一个任务,交给线程机器人,然后让线程去执行。线程池就是一个超级机器人,专门用来管理每一个线程。

    线程池有一下4个应用场景:

    1.异步方式的函数调用

    2.定时函数调用

    3.内核促发时函数调用

    4.异步I/O请求完成时函数调用

    使用通过4步来实现

    1.根据所选择的应用场景实现一个函数调用原型

    4种应用场景的函数模型分别为:

    VOID CALLBACK WorkCallback

    VOID CALLBACK TimeoutCallBack

    VOID CALLBACK WaitCallBack

    VOID CALLBACK OverlappedCompletionRoutine

    2.创建一个工作项

    4种应用场景的函数模型分别为:

    PTP_WORK CreateThreadPoolWork(@WorkCallback,…)

    PTP_TIMER CreateThreadPoolTimer(@TimeoutCallBack,….)

    PTP_WAIT CreateThreadPoolWait(@WaitCallBack,…)

    PTP_IO CreateThreadPoolTO(…,@OverlappedCompletionRoutine,…)

    3.将工作项提交到线程池

    4种应用场景的函数模型分别为:

    SubmitThreadPoolWort(PTP_WORK,…)

    SetThreadPoolTimer(PTP_TIMER,…)

    SetThreadPoolWait(PTP_WAIT,…)

    StartThreadPoolIO(PTP_IO,…)

    4.关闭工作项

    4种应用场景的函数模型分别为:

    CloseThreadPoolWork(PTP_WORK)

    CloseThreadPoolTimer(PTP_TIMER)

    CloseThreadPoolWait(PTP_WAIT)

    CloseThreadPoolIO(PTP_IO)

  • 相关阅读:
    动态设置字体大小需要注意的点
    getDimension与getDimensionPixelOffset与getDimensionPixelSize的区别
    统计图钻取的明细报表在非模态窗口中显示
    局部区块多个报表 TAB 页切换及局部区块的参数查询
    分栏报表制作攻略
    多值关联过滤
    鼠标悬停出现提示信息怎么做
    复杂报表设计之动态报表
    Logo(图片)作为报表水印的解决方法
    分组填报表的制作
  • 原文地址:https://www.cnblogs.com/pavkoo/p/3427002.html
Copyright © 2011-2022 走看看