我发现了一个好玩的项目 Oppai_benchmark 。然后我用 C 语言重写了一个Oppai_benchmark_c。写这个的时候用了一个线程池库C-Thread-Pool,但是这个库 Windows 上用不了,然后我发现 Windows 自带线程池,然后就自己把 Windows 线程池 api 封装成了 C-Thread-Pool API 的形式。然后我发现这个程序在 Windows 上比 Linux 性能差了一半。两个平台都是 Release 编译的,不是 Debug 。 是我封装的有问题还是本来 Windows 性能就比 Linux 差一些? 以前听说 Windows api 性能很好比 Linux 要好是真的吗?
1
Mithril 159 天前 1
性能好的那个你说的应该是 IOCP ,确实设计比 Linux 的好一些。但这也就只是 IO 方面的,比较的是作为 webserver ,极限情况下能有多大负载。
实际使用中差不了多少的。大部分情况下瓶颈也都不在系统这边,你也不会等快要榨干系统性能了才去扩容。 |
2
agagega 159 天前 via iPhone 1
没有试过线程,但多进程情况的性能是明显比 Linux 更差的
|
3
lonewolfakela 159 天前
一般来说重计算的应用,只要写的不是太烂,性能瓶颈应该不在线程池设计上……你最好先确认一下你在 windows 和 linux 上用的是一样的编译器和一样的编译参数……
|
4
jhytxy 159 天前 1
是的
只有 Linux 能把硬件性能榨干 Windows 在极限状况下就是稀巴烂 |
5
tool2dx 159 天前 via Android 1
牛逼啊,这是我看过最有奶量的 benchmark ,日本果然是一个神奇的国度,绝赞。
|
6
jibe OP @lonewolfakela 编译器不一样,Windows 特意用的 MSVC 。
|
7
jibe OP @lonewolfakela 我再用 mingw 试试
|
8
jibe OP @lonewolfakela 用不了相同编译器😢,mingw64 不支持信号,放弃了。
|
9
lonewolfakela 156 天前
@jibe #8 按理说两边应该都可以很容易地用上 clang 的?
|
10
jibe OP @lonewolfakela 我用的那个库 thpool 用了 POSIX 信号,Windows 不支持 POSIX 信号,所以编译不了。
|