小编Pil*_*Dev的帖子

处理7000多个客户?-MultiThreading(TCP,高流量)

我将创建一个网络系统,可以处理7000+ tcp套接字客户端,输入速度为5KB/s(客户端发送).我调查了这个问题:链接>>.他们说"创建1024个线程来处理1024个客户端".我知道有一个名为"select()"的方法,我认为我无法打开7000多个线程来处理7000多个客户端,因为我的处理器(或服务器)只有8CPU,这意味着7000多个线程是一个很大的错误.现在我想我将创建~1000个线程,我将处理这个线程中的每个7个套接字组.但现在问题是:如果我有相同的应用程序,但我有2CPU处理器,我无法获得1000个线程的最大性能,我应该创建(可能)500个线程.否则,如果我有8CPU处理器,我无法获得最大值.具有1000个线程的性能,我需要创建(可能)2000个线程来处理套接字.我怎么能理解"这个处理器可以处理X线程"?这是真的吗?

编辑:我想我可以创建一个正在观看节目的专家.也就是说,每个线程记录"我已经在X秒内完成了我的工作".和profiller处理此消息并决定创建一个线程或杀死一个线程.但是如何理解线程(或CPU)状态?

c++ sockets networking multithreading

7
推荐指数
1
解决办法
1349
查看次数

C++ 11在main()返回时杀死线程?

我听说"现代操作系统会清理关闭它时进程创建的所有线程"但是当我返回时main(),我遇到了这些错误:

1)此应用程序已请求Runtime以不寻常的方式终止它.有关更多信息,请联系应用程序的支持团队.

2)在没有活动异常的情况下终止调用

我的实现看起来像这样(我现在正在编写,例如抱歉执行错误):

void process(int id)
{
    while(true) { std::this_thread::sleep_for(std::chrono::milliseconds(1); } }
}

int main()
{
    std::thread thr1(process, 0);
    std::thread thr2(process, 1);
    //thr1.detach();
    //thr2.detach();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果我取消注释detach();,没有问题,但我的处理线程将是套接字读取器/写入器,它们将无限运行(直到主要返回).那怎么处理呢?怎么了?

编辑:也就是说,我不能逐个分离()每个线程,因为它们不会被正常终止(直到结束).哦,再次,如果我从DDOS窗口的X按钮关闭我的程序,(我的简单解决方案在这种情况下不起作用)我的detach(); 函数被传递,因为程序强制终止,这里再次出错:)

c++ multithreading c++11

6
推荐指数
1
解决办法
894
查看次数

计算大文件的Md5哈希值

我想让它变得非常清晰和简单.如果我有1gb内存并且我正在尝试计算2gb文件的md5哈希怎么办?目前,我这样做:

private static string Md5Hash(byte[] input)
{
    byte[] hash = MD5.Create().ComputeHash(input);
    StringBuilder builder = new StringBuilder(32);
    foreach(byte b in hash)
    { builder.Append(b.ToString("X2")); }
    return builder.ToString();
}

// I'm using it like: 'Md5.AsString(File.ReadAllBytes(filePath))'
Run Code Online (Sandbox Code Playgroud)

那你的建议是什么?

c# memory hash md5 file

3
推荐指数
1
解决办法
1373
查看次数

这4K的区别是什么?

我为一个简单的测试编写了一个简单的代码.

#include <stdio.h>

typedef struct
{
    void* Data;
}List;

void x()
{
    getchar();

    int i;
    List* myList[100000];

    for(i = 0; i < 100000; i++)
    {
        myList[i] = (List*)malloc(sizeof(List)*1024*1024);
    }

    getchar();

    for(i = 0; i < 100000; i++)
    {
        free(myList[i]);
    }
}

int main()
{
    x();
    getchar();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我看过"taskmgr"中的程序,我看过: - 540K - 4.500K - 544K(什么是4K差异?)

c memory heap memory-leaks

0
推荐指数
1
解决办法
107
查看次数

将char*复制到另一个char []

我有一个关于string/char的简单问题.我试图实现这样的基本系统;

#include <stdio.h>
#include <string.h>

int main()
{
    //I'll use 'char*' for socket receive buffer!
    const char* input = "This is a test!";
    char n[4];
    strncpy(n, input, 4);
    printf("%s\n%i\n", n, strlen(n));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我得到了这个输出:

Thisd0@
7
Run Code Online (Sandbox Code Playgroud)

怎么了?这是一个简单的for/while循环(IDK).

c++ arrays string char

-1
推荐指数
1
解决办法
4949
查看次数

标签 统计

c++ ×3

memory ×2

multithreading ×2

arrays ×1

c ×1

c# ×1

c++11 ×1

char ×1

file ×1

hash ×1

heap ×1

md5 ×1

memory-leaks ×1

networking ×1

sockets ×1

string ×1