Skip to content

Commit

Permalink
Source members (#12)
Browse files Browse the repository at this point in the history
* Using Source members for ColdTasks

* CancellationTask using Source overloads

* Strips to minimum bind/returnfrom needed
  • Loading branch information
TheAngryByrd authored Dec 1, 2022
1 parent fdf8df8 commit 88d5c6a
Show file tree
Hide file tree
Showing 8 changed files with 360 additions and 790 deletions.
18 changes: 10 additions & 8 deletions benchmarks/FSharpBenchmarks/AsyncBenchmarks.fs
Original file line number Diff line number Diff line change
Expand Up @@ -324,6 +324,8 @@ module Helpers =
[<CategoriesColumn>]
type AsyncBenchmarks() =

let getTempFileName () =
Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString("n"))

// ManyWriteFile

Expand All @@ -334,7 +336,7 @@ type AsyncBenchmarks() =

[<BenchmarkCategory("ManyWriteFile"); Benchmark>]
member _.ManyWriteFile_ply() =
let path = Path.GetTempFileName()
let path = getTempFileName ()

FSharp.Control.Tasks.Affine.task {
let junk = Array.zeroCreate bufferSize
Expand All @@ -349,7 +351,7 @@ type AsyncBenchmarks() =

[<BenchmarkCategory("ManyWriteFile"); Benchmark>]
member _.ManyWriteFile_async() =
let path = Path.GetTempFileName()
let path = getTempFileName ()

async {
let junk = Array.zeroCreate bufferSize
Expand All @@ -364,7 +366,7 @@ type AsyncBenchmarks() =

[<BenchmarkCategory("ManyWriteFile"); Benchmark>]
member _.ManyWriteFile_task() =
let path = Path.GetTempFileName()
let path = getTempFileName ()

task {
let junk = Array.zeroCreate bufferSize
Expand All @@ -380,7 +382,7 @@ type AsyncBenchmarks() =

[<BenchmarkCategory("ManyWriteFile"); Benchmark>]
member _.ManyWriteFile_coldTask() =
let path = Path.GetTempFileName()
let path = getTempFileName ()

coldTask {
let junk = Array.zeroCreate bufferSize
Expand All @@ -396,7 +398,7 @@ type AsyncBenchmarks() =

[<BenchmarkCategory("ManyWriteFile"); Benchmark>]
member _.ManyWriteFile_cancellableTask() =
let path = Path.GetTempFileName()
let path = getTempFileName ()

cancellableTask {
let junk = Array.zeroCreate bufferSize
Expand All @@ -412,7 +414,7 @@ type AsyncBenchmarks() =

[<BenchmarkCategory("ManyWriteFile"); Benchmark>]
member _.ManyWriteFile_cancellableTask_withCancellation() =
let path = Path.GetTempFileName()
let path = getTempFileName ()

cancellableTask {
let junk = Array.zeroCreate bufferSize
Expand All @@ -428,7 +430,7 @@ type AsyncBenchmarks() =

[<BenchmarkCategory("ManyWriteFile"); Benchmark>]
member _.ManyWriteFile_cancellableTask_withCancellation2() =
let path = Path.GetTempFileName()
let path = getTempFileName ()

cancellableTask {
let junk = Array.zeroCreate bufferSize
Expand All @@ -441,7 +443,7 @@ type AsyncBenchmarks() =

[<BenchmarkCategory("ManyWriteFile"); Benchmark>]
member _.ManyWriteFile_cancellableTask_withCancellation3() =
let path = Path.GetTempFileName()
let path = getTempFileName ()

cancellableTask {
let junk = Array.zeroCreate bufferSize
Expand Down
Original file line number Diff line number Diff line change
@@ -1,40 +1,40 @@
``` ini

BenchmarkDotNet=v0.13.1, OS=macOS Big Sur 11.6.2 (20G314) [Darwin 20.6.0]
Intel Core i9-9980HK CPU 2.40GHz, 1 CPU, 16 logical and 8 physical cores
.NET SDK=6.0.100
[Host] : .NET 6.0.0 (6.0.21.52210), X64 RyuJIT DEBUG
DefaultJob : .NET 6.0.0 (6.0.21.52210), X64 RyuJIT
BenchmarkDotNet=v0.13.2, OS=Windows 11 (10.0.22000.1219/21H2)
12th Gen Intel Core i9-12900F, 1 CPU, 24 logical and 16 physical cores
.NET SDK=7.0.100
[Host] : .NET 7.0.0 (7.0.22.51805), X64 RyuJIT AVX2 DEBUG
DefaultJob : .NET 7.0.0 (7.0.22.51805), X64 RyuJIT AVX2


```
| Method | Categories | Mean | Error | StdDev | Median | Ratio | RatioSD | Gen 0 | Gen 1 | Gen 2 | Allocated |
|------------------------------------------------ |-------------- |-------------:|-------------:|-------------:|-------------:|------:|--------:|-----------:|--------:|-------:|-----------:|
| ManyWriteFile_CSharpTasks | ManyWriteFile | 1,017.6 μs | 19.77 μs | 21.16 μs | 1,017.2 μs | 1.00 | 0.00 | - | - | - | 10 KB |
| ManyWriteFile_ply | ManyWriteFile | 1,221.4 μs | 52.10 μs | 148.66 μs | 1,169.5 μs | 1.25 | 0.14 | - | - | - | 10 KB |
| ManyWriteFile_async | ManyWriteFile | 1,307.2 μs | 25.89 μs | 41.06 μs | 1,294.4 μs | 1.29 | 0.04 | 35.1563 | 11.7188 | 1.9531 | 292 KB |
| ManyWriteFile_task | ManyWriteFile | 1,061.5 μs | 21.11 μs | 48.49 μs | 1,049.5 μs | 1.04 | 0.04 | - | - | - | 8 KB |
| ManyWriteFile_coldTask | ManyWriteFile | 1,057.7 μs | 21.10 μs | 53.71 μs | 1,038.9 μs | 1.05 | 0.08 | - | - | - | 8 KB |
| ManyWriteFile_cancellableTask | ManyWriteFile | 1,099.6 μs | 23.24 μs | 67.78 μs | 1,102.5 μs | 1.05 | 0.04 | - | - | - | 8 KB |
| ManyWriteFile_cancellableTask_withCancellation | ManyWriteFile | 1,082.9 μs | 21.58 μs | 58.70 μs | 1,063.9 μs | 1.08 | 0.07 | - | - | - | 9 KB |
| ManyWriteFile_cancellableTask_withCancellation2 | ManyWriteFile | 951.3 μs | 18.68 μs | 32.71 μs | 947.9 μs | 0.94 | 0.04 | 0.9766 | - | - | 8 KB |
| ManyWriteFile_cancellableTask_withCancellation3 | ManyWriteFile | 1,241.2 μs | 54.48 μs | 155.45 μs | 1,201.5 μs | 1.20 | 0.16 | 9.7656 | 3.9063 | - | 79 KB |
| | | | | | | | | | | | |
| NonAsyncBinds_CSharpTasks | NonAsyncBinds | 11,670.3 μs | 231.87 μs | 339.87 μs | 11,684.8 μs | 1.00 | 0.00 | 9468.7500 | - | - | 77,344 KB |
| NonAsyncBinds_ply | NonAsyncBinds | 16,193.3 μs | 242.80 μs | 215.23 μs | 16,209.9 μs | 1.40 | 0.04 | 9468.7500 | - | - | 77,344 KB |
| NonAsyncBinds_async | NonAsyncBinds | 909,374.0 μs | 12,104.86 μs | 10,730.64 μs | 911,352.0 μs | 78.89 | 2.61 | 30000.0000 | - | - | 248,443 KB |
| NonAsyncBinds_task | NonAsyncBinds | 13,635.9 μs | 169.10 μs | 141.21 μs | 13,634.0 μs | 1.19 | 0.04 | 9468.7500 | - | - | 77,344 KB |
| NonAsyncBinds_coldTask_bindTask | NonAsyncBinds | 22,285.8 μs | 328.94 μs | 291.60 μs | 22,266.3 μs | 1.93 | 0.05 | 11281.2500 | - | - | 92,188 KB |
| NonAsyncBinds_coldTask_bindColdTask | NonAsyncBinds | 22,976.5 μs | 457.59 μs | 801.43 μs | 23,027.2 μs | 1.97 | 0.08 | 11281.2500 | - | - | 92,188 KB |
| NonAsyncBinds_cancellableTask_bindTask | NonAsyncBinds | 23,018.4 μs | 174.25 μs | 145.50 μs | 23,031.6 μs | 2.00 | 0.06 | 11375.0000 | - | - | 92,969 KB |
| NonAsyncBinds_cancellableTask | NonAsyncBinds | 23,183.0 μs | 371.83 μs | 397.86 μs | 23,260.6 μs | 2.00 | 0.06 | 11375.0000 | - | - | 92,969 KB |
| | | | | | | | | | | | |
| AsyncBinds_CSharpTasks | AsyncBinds | 17,388.5 μs | 603.48 μs | 1,779.38 μs | 17,583.3 μs | 1.00 | 0.00 | - | - | - | 109 KB |
| AsyncBinds_ply | AsyncBinds | 22,273.6 μs | 525.30 μs | 1,507.19 μs | 22,066.7 μs | 1.30 | 0.17 | 62.5000 | - | - | 656 KB |
| AsyncBinds_async | AsyncBinds | 88,393.7 μs | 1,737.46 μs | 2,378.26 μs | 87,425.4 μs | 5.71 | 0.56 | 1000.0000 | - | - | 8,375 KB |
| AsyncBinds_task | AsyncBinds | 19,577.5 μs | 442.81 μs | 1,277.62 μs | 19,482.5 μs | 1.14 | 0.13 | - | - | - | 188 KB |
| AsyncBinds_coldTask_bindTask | AsyncBinds | 18,582.4 μs | 623.38 μs | 1,828.28 μs | 18,193.2 μs | 1.09 | 0.18 | 31.2500 | - | - | 305 KB |
| AsyncBinds_coldTask_bindColdTask | AsyncBinds | 19,229.0 μs | 375.91 μs | 742.00 μs | 19,219.6 μs | 1.19 | 0.14 | 31.2500 | - | - | 305 KB |
| AsyncBinds_cancellableTask_bindTask | AsyncBinds | 19,890.7 μs | 392.33 μs | 687.13 μs | 19,941.4 μs | 1.24 | 0.13 | 31.2500 | - | - | 320 KB |
| AsyncBinds_cancellableTask_bindColdTask | AsyncBinds | 19,412.4 μs | 387.11 μs | 857.81 μs | 19,334.6 μs | 1.19 | 0.12 | 31.2500 | - | - | 320 KB |
| AsyncBinds_cancellableTask_bindCancellableTask | AsyncBinds | 20,201.2 μs | 400.21 μs | 852.88 μs | 20,049.0 μs | 1.25 | 0.15 | 31.2500 | - | - | 320 KB |
| Method | Categories | Mean | Error | StdDev | Median | Ratio | RatioSD | Gen0 | Allocated | Alloc Ratio |
|------------------------------------------------ |-------------- |-------------:|-------------:|-------------:|-------------:|-------:|--------:|-----------:|-------------:|------------:|
| AsyncBinds_CSharpTasks | AsyncBinds | 3,329.6 μs | 28.27 μs | 26.45 μs | 3,334.1 μs | 1.00 | 0.00 | 3.9063 | 109.39 KB | 1.00 |
| AsyncBinds_ply | AsyncBinds | 4,031.5 μs | 31.04 μs | 29.03 μs | 4,037.5 μs | 1.21 | 0.01 | 39.0625 | 656.28 KB | 6.00 |
| AsyncBinds_async | AsyncBinds | 58,129.1 μs | 1,131.04 μs | 1,210.20 μs | 58,010.4 μs | 17.38 | 0.37 | 444.4444 | 8031.33 KB | 73.42 |
| AsyncBinds_task | AsyncBinds | 3,489.1 μs | 26.76 μs | 23.73 μs | 3,488.1 μs | 1.05 | 0.01 | 7.8125 | 125.01 KB | 1.14 |
| AsyncBinds_coldTask_bindTask | AsyncBinds | 3,673.6 μs | 51.34 μs | 48.02 μs | 3,672.7 μs | 1.10 | 0.02 | 23.4375 | 414.08 KB | 3.79 |
| AsyncBinds_coldTask_bindColdTask | AsyncBinds | 3,615.4 μs | 41.60 μs | 36.87 μs | 3,619.7 μs | 1.09 | 0.02 | 11.7188 | 179.7 KB | 1.64 |
| AsyncBinds_cancellableTask_bindTask | AsyncBinds | 3,529.3 μs | 48.39 μs | 42.90 μs | 3,514.9 μs | 1.06 | 0.02 | 27.3438 | 429.7 KB | 3.93 |
| AsyncBinds_cancellableTask_bindColdTask | AsyncBinds | 3,537.8 μs | 42.27 μs | 39.54 μs | 3,534.9 μs | 1.06 | 0.02 | 11.7188 | 195.32 KB | 1.79 |
| AsyncBinds_cancellableTask_bindCancellableTask | AsyncBinds | 3,614.9 μs | 25.58 μs | 23.93 μs | 3,612.6 μs | 1.09 | 0.01 | 11.7188 | 195.32 KB | 1.79 |
| | | | | | | | | | | |
| ManyWriteFile_CSharpTasks | ManyWriteFile | 506.0 μs | 10.06 μs | 21.01 μs | 501.4 μs | 1.00 | 0.00 | - | 8.04 KB | 1.00 |
| ManyWriteFile_ply | ManyWriteFile | 620.4 μs | 15.20 μs | 43.36 μs | 613.8 μs | 1.24 | 0.11 | - | 9.88 KB | 1.23 |
| ManyWriteFile_async | ManyWriteFile | 685.9 μs | 13.71 μs | 34.14 μs | 678.4 μs | 1.36 | 0.08 | 17.5781 | 291.85 KB | 36.29 |
| ManyWriteFile_task | ManyWriteFile | 522.9 μs | 13.02 μs | 36.50 μs | 518.7 μs | 1.05 | 0.08 | - | 8.22 KB | 1.02 |
| ManyWriteFile_coldTask | ManyWriteFile | 551.3 μs | 17.84 μs | 50.90 μs | 534.6 μs | 1.10 | 0.13 | 1.9531 | 31.75 KB | 3.95 |
| ManyWriteFile_cancellableTask | ManyWriteFile | 538.7 μs | 16.97 μs | 48.95 μs | 526.9 μs | 1.07 | 0.10 | 1.9531 | 31.76 KB | 3.95 |
| ManyWriteFile_cancellableTask_withCancellation | ManyWriteFile | 537.2 μs | 16.01 μs | 46.70 μs | 527.8 μs | 1.06 | 0.12 | 1.9531 | 31.91 KB | 3.97 |
| ManyWriteFile_cancellableTask_withCancellation2 | ManyWriteFile | 470.3 μs | 13.95 μs | 41.13 μs | 460.0 μs | 0.91 | 0.08 | 0.4883 | 8.33 KB | 1.04 |
| ManyWriteFile_cancellableTask_withCancellation3 | ManyWriteFile | 566.3 μs | 13.07 μs | 38.12 μs | 561.6 μs | 1.15 | 0.07 | 9.7656 | 149.01 KB | 18.53 |
| | | | | | | | | | | |
| NonAsyncBinds_CSharpTasks | NonAsyncBinds | 5,439.2 μs | 184.20 μs | 540.22 μs | 5,198.5 μs | 1.00 | 0.00 | 5046.8750 | 77343.75 KB | 1.00 |
| NonAsyncBinds_ply | NonAsyncBinds | 6,704.3 μs | 184.23 μs | 528.58 μs | 6,423.5 μs | 1.24 | 0.16 | 5046.8750 | 77343.76 KB | 1.00 |
| NonAsyncBinds_async | NonAsyncBinds | 599,715.7 μs | 11,605.08 μs | 12,417.30 μs | 594,821.4 μs | 111.24 | 9.89 | 16000.0000 | 245313.09 KB | 3.17 |
| NonAsyncBinds_task | NonAsyncBinds | 5,906.6 μs | 148.35 μs | 437.41 μs | 5,704.4 μs | 1.10 | 0.14 | 5046.8750 | 77343.75 KB | 1.00 |
| NonAsyncBinds_coldTask_bindTask | NonAsyncBinds | 10,023.2 μs | 265.76 μs | 771.03 μs | 9,604.4 μs | 1.86 | 0.24 | 6015.6250 | 92187.51 KB | 1.19 |
| NonAsyncBinds_coldTask_bindColdTask | NonAsyncBinds | 9,991.7 μs | 279.32 μs | 823.59 μs | 9,555.4 μs | 1.85 | 0.22 | 6015.6250 | 92187.51 KB | 1.19 |
| NonAsyncBinds_cancellableTask_bindTask | NonAsyncBinds | 14,051.6 μs | 344.87 μs | 1,016.86 μs | 13,672.6 μs | 2.61 | 0.30 | 7593.7500 | 116406.26 KB | 1.51 |
| NonAsyncBinds_cancellableTask | NonAsyncBinds | 10,324.6 μs | 285.78 μs | 842.62 μs | 9,813.6 μs | 1.92 | 0.23 | 6062.5000 | 92968.76 KB | 1.20 |
Loading

0 comments on commit 88d5c6a

Please sign in to comment.