windows服务开发

myiszjf 2018-06-24 05:43:19
请问windows服务开发中,
每个客户端每5秒发送过来一包定位数据,此外还有一些其他的数据包(这些数据包不频繁),我服务收到数据后扔给一个完成端口队列,发现数据处理速度比较慢,请问有什么方法来处理这些定位包呢?
...全文
196 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
myiszjf 2018-06-28
  • 打赏
  • 举报
回复
引用 8 楼 goldenhawking 的回复:
[quote=引用 2 楼 myiszjf 的回复:]
[quote=引用 1 楼 goldenhawking 的回复:]
你是说堵在这个队列上了吧!就是收到数据包来得及入队,但是队列越来越堵哈!
对这种多源数据,如果大部分类别处理非常快,少量类别慢,可以用流水之类的技术,
可以参考这个架构
一种基于Qt的可伸缩的全异步C/S架构服务器实现(三) 流水线结构线程池设计

您好,您的这种架构模式是单线程单队列,如果对于很多个客户端,岂不是每个客户端都需要创建一个线程,这种选择会好吗?[/quote]

哦!是多线程、单队列。
比如,目前队列有102个任务,你有8个核心,开了8个线程,正在干活。
时刻1,线程3做完了一个任务,从队列首部取出一个,接着做。此时队列101个。
时刻2,线程7做的任务超过了粒度门限,仅完成10%, 则把该任务放回队列尾部,并从首部取出一个任务,接着做。此时队列101个。
时刻3,线程1做完了一个任务,从队列首部取出一个,接着做。此时队列100个
时刻4,新任务入队,可以放在队列尾部,也可以放在首部。要看具体业务需要。此时队列101个
时刻5,线程2做的任务超过了粒度门限,仅完成32%,则把该任务放回队列尾部,并从首部取出一个任务,接着做。此时队列101个。
[/quote]
嗯,找着了,谢谢了
结贴了
myiszjf 2018-06-28
  • 打赏
  • 举报
回复
引用 8 楼 goldenhawking 的回复:
[quote=引用 2 楼 myiszjf 的回复:]
[quote=引用 1 楼 goldenhawking 的回复:]
你是说堵在这个队列上了吧!就是收到数据包来得及入队,但是队列越来越堵哈!
对这种多源数据,如果大部分类别处理非常快,少量类别慢,可以用流水之类的技术,
可以参考这个架构
一种基于Qt的可伸缩的全异步C/S架构服务器实现(三) 流水线结构线程池设计

您好,您的这种架构模式是单线程单队列,如果对于很多个客户端,岂不是每个客户端都需要创建一个线程,这种选择会好吗?[/quote]

哦!是多线程、单队列。
比如,目前队列有102个任务,你有8个核心,开了8个线程,正在干活。
时刻1,线程3做完了一个任务,从队列首部取出一个,接着做。此时队列101个。
时刻2,线程7做的任务超过了粒度门限,仅完成10%, 则把该任务放回队列尾部,并从首部取出一个任务,接着做。此时队列101个。
时刻3,线程1做完了一个任务,从队列首部取出一个,接着做。此时队列100个
时刻4,新任务入队,可以放在队列尾部,也可以放在首部。要看具体业务需要。此时队列101个
时刻5,线程2做的任务超过了粒度门限,仅完成32%,则把该任务放回队列尾部,并从首部取出一个任务,接着做。此时队列101个。
[/quote]
谢谢,找了好久没找着源码,请问源码在哪里呢,可以参考下吗?
myiszjf 2018-06-25
  • 打赏
  • 举报
回复
对于服务中如何选择任务处理模式呢?我个人觉得单线程单队列总感觉如果每个客户端过来都给他分配一个队列,将会导致线程很多。但是多线程单队列,所有客户端收到的数据包都扔到一个队列里面,用线程池来处理,每个客户端的定位数据包很多,会导致拥堵,所以现在就是很疑惑到底该如何选择,求大神解惑。
赵4老师 2018-06-25
  • 打赏
  • 举报
回复
CSDN缩小了粘贴代码的最大字节数,楼主就凑合看吧。
想看到完整的例子,百度搜“zhao4zhong1 取两个字节打印 site:bbs.csdn.net”
赵4老师 2018-06-25
  • 打赏
  • 举报
回复
理解讨论之前请先学会如何观察

仅供参考:
//循环向a函数每次发送200个字节长度(这个是固定的)的buffer,
//a函数中需要将循环传进来的buffer,组成240字节(也是固定的)的新buffer进行处理,
//在处理的时候每次从新buffer中取两个字节打印
#ifdef _MSC_VER
#pragma warning(disable:4996)
#endif
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#ifdef _MSC_VER
#include <windows.h>
#include <process.h>
#include <io.h>
#define MYVOID void
#define vsnprintf _vsnprintf
#else
#include <unistd.h>
#include <sys/time.h>
#include <pthread.h>
#define CRITICAL_SECTION pthread_mutex_t
#define MYVOID void *
#endif
//Log{
#define MAXLOGSIZE 20000000
#define MAXLINSIZE 16000
#include <time.h>
#include <sys/timeb.h>
#include <stdarg.h>
char logfilename1[]="MyLog1.log";
char logfilename2[]=
赵4老师 2018-06-25
  • 打赏
  • 举报
回复
无profiler不要谈效率!!尤其在这个云计算、虚拟机、模拟器、CUDA、多核 、多级cache、指令流水线、多种存储介质、……满天飞的时代!
myiszjf 2018-06-25
  • 打赏
  • 举报
回复
引用 1 楼 goldenhawking 的回复:
你是说堵在这个队列上了吧!就是收到数据包来得及入队,但是队列越来越堵哈!
对这种多源数据,如果大部分类别处理非常快,少量类别慢,可以用流水之类的技术,
可以参考这个架构
一种基于Qt的可伸缩的全异步C/S架构服务器实现(三) 流水线结构线程池设计

您好,您的这种架构模式是单线程单队列,如果对于很多个客户端,岂不是每个客户端都需要创建一个线程,这种选择会好吗?
赵4老师 2018-06-25
  • 打赏
  • 举报
回复
参考epoll源代码片断?
  • 打赏
  • 举报
回复
引用 2 楼 myiszjf 的回复:
[quote=引用 1 楼 goldenhawking 的回复:]
你是说堵在这个队列上了吧!就是收到数据包来得及入队,但是队列越来越堵哈!
对这种多源数据,如果大部分类别处理非常快,少量类别慢,可以用流水之类的技术,
可以参考这个架构
一种基于Qt的可伸缩的全异步C/S架构服务器实现(三) 流水线结构线程池设计

您好,您的这种架构模式是单线程单队列,如果对于很多个客户端,岂不是每个客户端都需要创建一个线程,这种选择会好吗?[/quote]

哦!是多线程、单队列。
比如,目前队列有102个任务,你有8个核心,开了8个线程,正在干活。
时刻1,线程3做完了一个任务,从队列首部取出一个,接着做。此时队列101个。
时刻2,线程7做的任务超过了粒度门限,仅完成10%, 则把该任务放回队列尾部,并从首部取出一个任务,接着做。此时队列101个。
时刻3,线程1做完了一个任务,从队列首部取出一个,接着做。此时队列100个
时刻4,新任务入队,可以放在队列尾部,也可以放在首部。要看具体业务需要。此时队列101个
时刻5,线程2做的任务超过了粒度门限,仅完成32%,则把该任务放回队列尾部,并从首部取出一个任务,接着做。此时队列101个。
  • 打赏
  • 举报
回复
你是说堵在这个队列上了吧!就是收到数据包来得及入队,但是队列越来越堵哈!
对这种多源数据,如果大部分类别处理非常快,少量类别慢,可以用流水之类的技术,
可以参考这个架构
一种基于Qt的可伸缩的全异步C/S架构服务器实现(三) 流水线结构线程池设计

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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