aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-04-11 19:09:14 -0700
committerGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-04-11 19:09:14 -0700
commit1d79703d24c5e8271daec9028c825d11c27dbf7d (patch)
tree9a2553ee1295002d82c6957054506d3dcd560f0d
parentf357377de9f5111dbc8e4aaa7c0f8ed073744b0a (diff)
downloadbun-1d79703d24c5e8271daec9028c825d11c27dbf7d.tar.gz
bun-1d79703d24c5e8271daec9028c825d11c27dbf7d.tar.zst
bun-1d79703d24c5e8271daec9028c825d11c27dbf7d.zip
slight perf improvement to concurrently queueing tasks
-rw-r--r--src/javascript/jsc/javascript.zig10
1 files changed, 6 insertions, 4 deletions
diff --git a/src/javascript/jsc/javascript.zig b/src/javascript/jsc/javascript.zig
index 978349d62..8073ad879 100644
--- a/src/javascript/jsc/javascript.zig
+++ b/src/javascript/jsc/javascript.zig
@@ -635,10 +635,12 @@ pub const VirtualMachine = struct {
this.tasks.ensureUnusedCapacity(add) catch unreachable;
{
- @fence(.SeqCst);
- while (this.concurrent_tasks.readItem()) |task| {
- this.tasks.writeItemAssumeCapacity(task);
- }
+ var writable = std.mem.sliceAsBytes(this.tasks.writableSlice(0));
+ const readable = std.mem.sliceAsBytes(this.concurrent_tasks.readableSlice(0));
+ @memcpy(writable.ptr, readable.ptr, @minimum(writable.len, readable.len));
+ this.tasks.count += add;
+ this.concurrent_tasks.head = 0;
+ this.concurrent_tasks.count = 0;
}
_ = this.pending_tasks_count.fetchAdd(add, .Monotonic);