PowerShell v4, 144 bayt
$d=date;gjb|rjb
1..20|%{sajb{$x=date;sleep 3;((date)-$x).Ticks/1e7}>$null}
while(gjb -s "Running"){}(gjb|rcjb)-join'+'|iex
((date)-$d).Ticks/1e7
Kümeler $d
için eşit Get-Date
ve birlikte varolan herhangi bir iş geçmişlerini temizler Get-Job | Remove-Job
. Daha sonra döngü yapıyoruz 1..20|%{...}
ve her yineleme iş için Start-Job
komut dosyası bloğunu geçerek yürütüyoruz {$x=date;sleep 3;((date)-$x).ticks/1e7}
(yani, her iş bu komut dosyası bloğunu yürütecek). >$null
İade edilen geri bildirimi (örneğin, iş adı, durumu vb.) Bastırmak için bu çıktının boru hattını yerleştiriyoruz.
Komut dosyası bloğu setleri $x
için Get-Date
, o Start-Sleep
için 3
saniye sonra yeni sürer Get-Date
, okuma çıkarır $x
, alır .Ticks
ve böler 1e7
(hassasiyetle) saniye alır.
Ana iş parçacığına geri dönersek, herhangi bir iş hala -S
tatus olduğu sürece "Running"
boş bir while
döngü içinde döneriz . Bu işlem tamamlandıktan sonra, biz Get-Job
, mevcut tüm işler için nesneleri yukarı çekmek için boru olanlara Receive-Job
hangi STDOUT eşdeğer (yani ne çıktı) yukarı çeker -join
birlikte sonuçları +
ve boru bu kadar iex
( Invoke-Expression
ve benzeri eval
). Bu, ortaya çıkan uyku süresini artı ek yükü verecektir.
Son satır benzerdir, yeni bir tarih alırsa, orijinal tarih damgasını çıkarır $d
, alır .Ticks
ve 1e7
toplam yürütme süresinin çıktısını almak üzere böler .
NB
Tamam, bu kuralların biraz gerginliği . Görünüşe göre, ilk çalıştırmada, PowerShell, varsayılan kabuk profiliyle yüklenmediğinden, çeşitli iş parçacığı işlemleri için diskten bir sürü .NET derlemesi yüklemesi gerekiyor. Daha sonraki işlemler , derlemeler zaten bellekte olduğundan, iyi çalışıyor. Kabuk penceresini yeterince boşta bırakırsanız, PowerShell'in yerleşik çöp koleksiyonunun yanına gelmesini ve tüm bu montajları boşaltmasını sağlayarak bir sonraki uygulamanın yeniden yüklenirken uzun zaman almasına neden olursunuz . Bunun bir yolundan emin değilim.
Bunu aşağıdaki çalışmalarda yürütme sürelerinde görebilirsiniz. Yeni bir kabuk başlattım, golf dizinime gittim ve senaryoyu yürüttüm. İlk deneme korkunçtu, ikincisi (hemen idam edildi) iyi çalıştı. Daha sonra çöp toplama işleminin gerçekleşmesini sağlamak için kabuğunu birkaç dakika boşta bıraktım ve sonra bu işlem tekrar uzun sürdü, ancak sonraki işlemler yine iyi sonuç veriyor.
Örnek çalıştırmalar
Windows PowerShell
Copyright (C) 2014 Microsoft Corporation. All rights reserved.
PS H:\> c:
PS C:\> cd C:\Tools\Scripts\golfing
PS C:\Tools\Scripts\golfing> .\wait-a-minute.ps1
63.232359
67.8403415
PS C:\Tools\Scripts\golfing> .\wait-a-minute.ps1
61.0809705
8.8991164
PS C:\Tools\Scripts\golfing> .\wait-a-minute.ps1
62.5791712
67.3228933
PS C:\Tools\Scripts\golfing> .\wait-a-minute.ps1
61.1303589
8.5939405
PS C:\Tools\Scripts\golfing> .\wait-a-minute.ps1
61.3210352
8.6386886
PS C:\Tools\Scripts\golfing>