有没有办法在Web工作者中同步等待或检查新消息?
我有一个庞大的复杂代码体(从emscripten编译的LLVM),我无法围绕回调进行重构.
我需要确保在某个行之后的代码不会执行,直到我收到并处理来自UI线程的消息.如果我用while循环阻塞,事件循环永远不会运行,所以我无法接收消息.
这是我试图解决的问题:
我有大约100个二进制文件(总共158KB,它们的大小大致相同+/- 50%).我需要有选择地只解析这些文件中的一些(在最坏的情况下可能是50,在其他情况下只有1到5).顺便说一句,这是在Android设备上.
在Java中执行此操作的最快方法是什么?
一种方法是将所有内容组合到一个文件中,然后使用文件搜索来获取每个单独的文件.那样文件打开只需要调用一次,这通常很慢.但是,为了知道每个文件的位置,需要在文件的开头有某种表 - 可以使用脚本生成 - 但是文件也需要在表中的索引中命令它们被连接起来,因此文件搜索不需要做太多工作(如果我错了,请纠正我).
更好的方法是使文件内存映射,然后表不必按顺序排序,因为内存映射文件可以随机访问(如果我错了,再次纠正我).
如果使用zip压缩,则创建该表将是不必要的,因为zip压缩已经创建了一个表.此外,所有文件都不必连接.我可以压缩目录,然后通过zip文件中的条目访问每个单独的文件.问题解决了.
除非zip文件没有内存映射,否则读取速度会慢,因为系统调用比直接内存访问慢(如果我错了,请纠正我).所以我得出结论,最好的解决方案是使用内存映射的zip存档.
但是,ZipFile条目返回一个InputStream以读取条目的内容.而MappedByteBuffer需求的RandomAccessFile其中一个文件名作为输入,而不是一个InputStream.
无论如何都要将内存映射到一个zip文件以便快速读取?或者是否有一个不同的解决方案来解决这个选择的文件?
谢谢
编辑:我测试了文件的打开,关闭和解析速度这里是我发现的统计数据:
Number of Files: 25 (24 for parse because garbage collection interrupted timing)
Total Open Time: 72ms
Total Close Time: 1ms
Total Parse Time: 515ms
(这有点偏向Parse,因为Parse缺少一个文件)
%Total time Open takes: 12%
%Total time Close takes: 0.17%
%Total time Parse takes: 88%
Avg time Open takes per file: 2.88ms
Avg time Close takes per file: …
我想记录我最近的cd任何一个终端.我认为这样做的好方法是编写一个简单的bash脚本包装cd:
#!/bin/bash
cd $1 && echo `pwd` > /tmp/.cwd
Run Code Online (Sandbox Code Playgroud)
既然我希望cd在我的终端进程中发生,我需要运行脚本. bettercd.sh,对吗?
我的问题出现了:如果我cd对这个新的别名. bettercd.sh,我的shell也会cd使用. bettercd.sh- 无限递归扩展脚本内部.
有没有办法cd从不同的名称调用但具有相同的行为?换句话说,是否有一些命令行为完全(或非常相似)cd我可以在我的shell脚本中使用而不会在我cd每天使用别名时注意到差异?
我选择的shell是zsh,如果这在某种程度上是相关的.
谢谢你的帮助.
android ×1
file-io ×1
java ×1
javascript ×1
linux ×1
shell ×1
unix ×1
web-worker ×1
zip ×1
zsh ×1