小编mie*_*war的帖子

如何在RxJS中将可变长度数据包流转换为固定长度数据包?

我是RxJS的新手。

鉴于以下流

[ 'foo ', 'bar', ' b', 'az 12', '3', '4567' ]
Run Code Online (Sandbox Code Playgroud)

我想将其转换为固定大小的数据包(例如3个字节)+其余的数据包

['foo', ' ba', 'r b', 'az ', '123', '456', '7']
Run Code Online (Sandbox Code Playgroud)

在现实生活中,它实际上是二进制数据的缓冲区。

我想知道什么是惯用的RxJS方法。

我发现的简单方法是:

from([ 'foo ', 'bar', ' b', 'az 12', '3', '4567' ])
.pipe(
    Rx.concatMap(v => from(v)),
    Rx.bufferCount(3),
    Rx.map(v => v.join(''))
)
.subscribe(v => console.log(v))
Run Code Online (Sandbox Code Playgroud)

将所有内容分割为一个字符似乎很浪费,所以我发现的另一种方法是使用.slice()可能更好,但更冗长。

const bufferToSize = (chunkSize) => (source) =>
    Observable.create(subscriber => {
        let buffer = new Buffer('')

        return source.subscribe({
            next: (value) => {
                buffer += value

                while (buffer.length > …
Run Code Online (Sandbox Code Playgroud)

javascript node.js observable rxjs

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

在Julia中为对象设置终结器函数

我正在调试一些Julia代码并试图弄清楚为什么以下不起作用.(朱莉娅0.6.3)

struct Foo
    foo::String
end

k = Foo("bar")

finalizer(k, k->print("finalized!"))
Run Code Online (Sandbox Code Playgroud)

虽然我希望它打印"最终确定!",但实际上我收到以下错误:

ERROR: objects of type Foo cannot be finalized
Stacktrace:
 [1] finalizer(::Any, ::Any) at ./base.jl:127
Run Code Online (Sandbox Code Playgroud)

我可以找到关于终结器功能的文档很少,没有例子,我做错了什么?

julia

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

gcc -O3问题,从不同的文件调用相同的函数会产生不同的性能

我正在运行以下基准测试:

int main(int argc, char **argv)
{
 char *d = malloc(sizeof(char) * 13);

 TIME_THIS(func_a(999, d), 99999999);
 TIME_THIS(func_b(999, d), 99999999);

 return 0;
}
Run Code Online (Sandbox Code Playgroud)

通过正常编译,两个函数的结果相同

% gcc func_overhead.c func_overhead_plus.c -o func_overhead && ./func_overhead                                                                               
[func_a(999, d)                     ]      9276227.73
[func_b(999, d)                     ]      9265085.90
Run Code Online (Sandbox Code Playgroud)

但是与-O3他们是非常不同的

% gcc -O3 func_overhead.c func_overhead_plus.c -o func_overhead && ./func_overhead                                                                
[func_a(999, d)                     ]    178580674.69
[func_b(999, d)                     ]     48450175.29
Run Code Online (Sandbox Code Playgroud)

func_a和func_b定义如下:

char *func_a(uint64_t id, char *d)
{
 register size_t i, j;
 register char c;

 for (i = 0, j = 36; i <= …
Run Code Online (Sandbox Code Playgroud)

c optimization performance gcc

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

标签 统计

c ×1

gcc ×1

javascript ×1

julia ×1

node.js ×1

observable ×1

optimization ×1

performance ×1

rxjs ×1