小编And*_*oid的帖子

为Windows编写纤薄的C++程序(如uTorrent)

我一直很欣赏原来的uTorrent程序.它看起来很棒,不到64kb,非常快,并且拥有我需要的所有功能.不幸的是,该程序是封闭源程序(并且当天变得更加臃肿)所以我来到Stackoverflow获取灵感.

在Windows上编写快速,内存高效且优雅的程序时,您建议使用哪些方法?

虽然C#(以及整个.NET概念)都是很酷的想法,但我更感兴趣的是"纯粹主义"的答案以及为Windows平台编写高效,快速软件的挑战,就像最初的uTorrent客户端一样.我不介意分配自己的内存,做我自己的垃圾收集和创建自己的数据结构.

关于书籍,文章,图书馆,IDE的建议(甚至是将更多咖啡因纳入我的系统的有效方法)也受到欢迎.

c++ windows

40
推荐指数
6
解决办法
8856
查看次数

Pascal及其当前的应用

我在1997年学习了Turbo Pascal,我非常喜欢它作为一种语言.一切都非常有条理,编译器确保你以正确的方式做事.我后来尝试过Delphi但从未对它感兴趣.

从那时起,我使用了许多不同的编程和脚本语言(C,C++,PHP,Python,Perl,TCL),最近我开始考虑我的旧Turbo Pascal时代.

所以,我想知道Pascal在今天可能有用的实用目的以及可用的API和框架.有没有人在现代开发环境中使用Pascal或者它只是一种死语言?

澄清我的问题:Pascal可以用于现代应用程序开发.它是否被使用以及如何使用?

维基百科链接或快速谷歌搜索无济于事,我一直在那里.这就是我问"专家"的原因.

pascal

33
推荐指数
8
解决办法
3万
查看次数

是否将指针视为C中的原子动作?

如果我有一个多线程程序通过引用读取缓存类型的内存.我可以通过主线程更改此指针,而不会冒任何其他线程读取意外值的风险.

在我看来,如果更改是原子的,其他线程将读取旧值或更新值; 从不随机内存(或空指针),对吧?

我知道无论如何我应该使用同步方法,但我仍然很好奇.

指针变化是原子的吗?

更新:我的平台是64位Linux(2.6.29),虽然我也想要一个跨平台的答案:)

c multithreading synchronization

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

高效的网络服务器设计实例,用C语言编写

我有兴趣学习如何编写极其高效的网络服务器软件,我不介意用指针,套接字和线程弄脏手.我说的是能够处理数千个并发连接的服务器.每个客户端没有太多处理,但有一点.

您知道真正高效的网络服务器的任何代码示例吗?

可选地指向跨平台的小型,文档齐全的代码.

c linux performance multithreading network-programming

7
推荐指数
2
解决办法
2012
查看次数

处理超过1024个文件描述符,在Linux上的C语言中

我正在使用epoll(边缘触发)和线程的线程网络服务器,我正在使用httperf来对我的服务器进行基准测试.

到目前为止,它的表现非常好或几乎完全符合发送请求的速度.直到1024障碍,一切都放慢到大约30个请求/秒.

在64位的Ubuntu 9.04上运行.

我已经尝试过了:

  • 成功增加文件描述符的ulimit数.它只是没有提高1024个并发连接以上的性能.

    andri @ filefridge:〜/ Dropbox/School/Group 452/Code/server $ ulimit -n
    20000

我很确定这种减速是在操作系统中发生的,因为它发生在事件发送到epoll之前(是的,我也增加了epoll的限制).

我需要对程序可以处理的并发连接数进行基准测试,直到它开始变慢(没有操作系统干扰).

如何让我的程序运行超过1024个文件描述符?

这个限制可能是有原因的,但是出于基准测试的目的,我需要它.

更新

谢谢你的所有答案,但我想我找到了罪魁祸首.在我的程序中重新定义__FD_SETSIZE后,一切开始变得更快.当然ulimit也需要提升,但没有__FD_SETSIZE我的程序永远不会利用它.

c linux networking multithreading

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

Cloud-Run 进程失败并显示 500 状态代码和 membarrier gvisor 错误

背景

该服务是一个简单的 Go 程序,它将文件从 Cloud Storage 传送到浏览器。

在我的 Macbook 上一切正常,但对于某些请求在 Cloud-Run(托管)上失败。主要是大型 mp4 文件。

问题

日志只显示一个500状态,浏览器也是如此。但是我的服务除了开始复制文件之外没有记录任何内容。没有 IO 错误或任何东西。

此消息在500状态前 4 秒显示:

Container Sandbox Limitation: Unsupported syscall membarrier(0x10,0x0,0x0,0x8,0x775dce0b030,0x775dce0b000). Please, refer to https://gvisor.dev/c/linux/amd64/membarrier for more information.

我无法在本地重现此内容。使用相同的配置和 GCP 存储桶在本地正常工作。

该服务在带有较小文件(如图像)的 Cloud-Run 上运行良好。只是不是我试过的视频。

我试过了

  • 将所有内容记录到io.Copy. 没有错误,io.Copy调用后挂起。
  • 增加容器的内存。它现在运行1G。与 512M 相比没有变化。
  • 使用相同的配置、相同的凭据在本地运行在 Docker 容器中。没问题。
  • 在 Twitter 上联系 GCP

更新 2019-08-16

我创建了一个非常简单的服务,将“A”打印到 http responsewriter。它也可以在本地完美运行,但在云运行中以较大的尺寸返回 500。1MB OK,5MB OK,50MB 失败,100MB 失败等等。这个服务运行时没有 membarrier 消息。

代码可在此处获得:https : //github.com/andrioid/reproduce-cloud-run-bug

也报告了问题跟踪器:https : //issuetracker.google.com/issues/139511257 …

go google-cloud-platform google-cloud-run gvisor

5
推荐指数
1
解决办法
1171
查看次数