小编Nat*_*ith的帖子

如何告诉visualvm在哪里找到我的源代码?

我正在运行VisualVM来分析一个简单的Java应用程序.当我双击分析窗格中的方法(希望获得更多详细信息)时,它会显示"没有为类找到源......".我知道消息来源在哪里.我如何告诉VisualVM在哪里看?

java visualvm

20
推荐指数
1
解决办法
2837
查看次数

epoll的EPOLLEXCLUSIVE模式如何与电平触发相互作用?

假设发生以下一系列事件:

  • 我们设置了一个监听套接字
  • 线程A等待侦听套接字变为可读的块,使用 EPOLLIN | EPOLLEXCLUSIVE
  • 线程B也阻止等待侦听套接字变得可读,也使用 EPOLLIN | EPOLLEXCLUSIVE
  • 传入连接到达侦听套接字,使套接字可读,内核选择唤醒线程A.
  • 但是,在线程实际唤醒并调用之前accept,第二个传入连接到达侦听套接字.

这里,套接字已经可读,因此第二个连接不会改变它.这是级别触发的epoll,因此根据正常规则,第二个连接可以被视为无操作,第二个线程不需要被唤醒.......当然,不是第二个线程的醒来就会打败整个目的EPOLLEXCLUSIVE吗?但我对API设计师做正确事情的信任并不像以前那么强烈,我在文档中找不到任何可以排除这一点的东西.

问题

a)上面的场景是否可能,两个连接到达但只有线程被唤醒?或者是否保证侦听套接字上的每个不同的传入连接都会唤醒另一个线程?

b)是否有预测如何EPOLLEXCLUSIVE和水平触发的epoll相互作用的一般规则?

b)中什么EPOLLIN | EPOLLEXCLUSIVE以及EPOLLOUT | EPOLLEXCLUSIVE用于字节流FDS,像连接的TCP套接字或管道?例如,如果在管道已经可读的情况下有更多数据到达会发生什么?

sockets linux epoll

12
推荐指数
1
解决办法
2812
查看次数

关闭事件对象是否会导致等待该对象的线程唤醒?

假设我有一个 Windows 事件对象,例如通过调用CreateEvent.

线程 A 被阻塞WaitForSingleObject(event_handle)

线程 B 调用CloseHandle(event_handle).

问题1:线程A发生了什么?

问题2:线程A被阻塞有什么影响吗WaitForMultipleObjects?返回什么WaitForMultipleObjects

windows

8
推荐指数
1
解决办法
417
查看次数

我怎样才能故意泄漏一个对象,以便它永远不会被垃圾收集?

这是一个奇怪的问题:我想故意泄漏一个 Python 对象及其引用的所有对象。我希望他们能够永垂不朽。最重要的是,我想保证他们的终结器/__del__方法永远不会运行。(动机与一个奇怪的问题有关fork- 安全性是最糟糕的,但我不会在这里讨论它fork,但我们坚持下去。)

可靠地做到这一点的最简单方法是什么?我可以在模块全局变量中保存对它的引用,但是当程序关闭时解释器可以并且可能会垃圾收集模块全局变量,对吧?

认为生成一个线程,daemon=True该线程保存对其堆栈上的对象的引用并永远休眠,但这很奇怪,看到这个随机线程会让使用调试器的人感到困惑。

在 CPython 上,我可以使用ctypeshack 来手动增加对象的引用计数,但这不适用于 PyPy 等其他解释器。

实现这个丑陋目标的最便携、可靠、最干净的方法是什么?

(我只关心 Python 3.5+,以防影响任何事情。)

python

7
推荐指数
0
解决办法
168
查看次数

在实际系统中,bind() 可以返回 EINPROGRESS 吗?

根据 POSIX,如果您调用bind非阻塞套接字,则允许它EINPROGRESS异步返回并完成。(参考。

我检查了 libuv 和 Twisted 的源代码,据我所知,它们都调用bind非阻塞套接字,而没有执行任何操作来处理此错误。Linux 或 FreeBSDbind(2)手册页都没有提到这种可能的结果。

这真的发生在任何真实的系统上吗?如果是这样,您如何在bind完成后收到通知?

sockets posix

6
推荐指数
0
解决办法
306
查看次数

如何从三个ReceiveStream一次读取一行?

asyncio有StreamReader.readline(),允许这样的东西:

while True:
    line = await reader.readline()
    ...
Run Code Online (Sandbox Code Playgroud)

(我认为async for在asyncio中没有,但那将是明显的演变)

如何实现三重奏的等效?

在三人组0.9中,我没有直接看到任何高级别的支持.我所看到的只是ReceiveStream.receive_some()返回任意大小的二进制块; 对我来说,解码并将其转换为线性似乎并非易事.我可以使用标准库函数或代码片段吗?我发现io stdlib模块看起来很有前途,但我认为没有办法提供"feed"方法.

python python-trio

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

有没有办法使用 IOCP 来通知套接字何时可读/可写?

我正在寻找某种方法,当套接字变为可读/可写时(即下一个发送/接收将立即完成),在 I/O 完成端口上获取信号。基本上我想要一个重叠版本的WSASelect.

(是的,我知道对于许多应用程序来说,这是不必要的,您可以继续发出重叠的send调用。但在其他应用程序中,您希望延迟生成要发送的消息,直到最后一刻可能,如此处所讨论的在这些情况下(a) 等待套接字可写,(b) 生成下一条消息,(c) 发送下一条消息,这很有用。)

到目前为止,我能想到的最好的解决方案是生成一个线程来调用selectthen PostQueuedCompletionStatus,这很糟糕并且不是特别可扩展......有没有更好的方法?

sockets windows iocp

4
推荐指数
1
解决办法
1299
查看次数

如何修改 PE 导入表,而不是链接到 foo.dll,而是链接到 bar.dll?

我有一个文件,plugin.dll其导入表链接到foo.dll. 我想创建一个与 相同的新文件plugin-modified.dll,只是它的导入表从. 任何人都可以建议一种以这种方式重写PE文件的工具吗?理想情况下是命令行/脚本化和开源,但我愿意考虑替代方案......plugin-modified.dllplugin.dllfoo.dllbar.dll

(真正的用例是我想替换对foo.dllwith的引用foo-unique-id-934019384.dll,以便能够在避免名称冲突的同时发布plugin.dllfoo.dll一起发布,以防万一其他人也分发了一些其他插件,这些插件链接到它自己的不同版本的foo.dll.

在 Linux 上,这可以使用该patchelf工具完成,而在 OS X 上,可以使用install_name_tool; 我正在寻找 Windows 等价物。

我知道 SxS 程序集可能能够以不同的方式解决这个问题,但它们有自己的局限性,所以我想在决定之前探索这两种方法。)

windows dll native

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

在 OS X 上,是否可以从纯 Python 获取用户库目录?

我正在编写一个纯 Python 库,出于各种原因,我非常希望避免要求用户安装任何二进制扩展。但是,在 OS X 上运行时,我还想找到用户库目录 ( ~/Library) 以便我可以在那里存储一些配置数据,我的理解是,对于非常有效且模糊但重要的原因,正确的方法不是只是写~/Library在我的代码中,而是通过使用一些代码询问 OS X 目录在哪里

[NSSearchPathForDirectoriesInDomains(NSLibraryDirectory,
                                     NSUserDomainMask,
                                     YES)
 objectAtIndex:0];
Run Code Online (Sandbox Code Playgroud)

当然,这段代码是Objective-C,不是Python,所以不能直接使用。如果它是普通的 C,我只是ctypes习惯从 Python 调用它,但事实并非如此。有没有办法从 Python 进行这个调用,而无需在 Objective-C 中编写扩展模块或要求用户安装一些扩展模块,例如PyObjC?或者,如果我~/Library像其他人一样放弃并进行硬编码,那么会发生什么可怕的事情吗?

python macos objective-c

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

标签 统计

python ×3

sockets ×3

windows ×3

dll ×1

epoll ×1

iocp ×1

java ×1

linux ×1

macos ×1

native ×1

objective-c ×1

posix ×1

python-trio ×1

visualvm ×1