ParallelPacker compress/decompress [source file path] [result file path]
ParallelPacker pack/unpack [source file path] [result file path]
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ExitCode: 0 - Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΎ ΡΡΠΏΠ΅ΡΠ½ΠΎ, 1 - ΠΏΡΠ΅ΡΠ²Π°Π½ΠΎ ΠΈΠ·-Π·Π° Π²ΠΎΠ·Π½ΠΈΠΊΡΠΈΡ ΠΎΡΠΈΠ±ΠΎΠΊ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, 2 - ΠΎΡΠΌΠ΅Π½Π΅Π½ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ
ΠΠ»Π°ΡΡΠΎΡΠΌΠ°: .NET Core 3.0
ΠΠ°Π΄Π°ΡΠ° ΠΏΠΎΡ ΠΎΠΆΠ° Π½Π° Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡΡ Π²Π°ΡΠΈΠ°ΡΠΈΡ ΡΠΈΠΏΠΎΠ²ΠΎΠΉ Producer/Consumer ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ. ΠΡΠ»ΠΈ ΠΏΠΎΠ»Π°Π³Π°ΡΡ, ΡΡΠΎ ΠΏΠΎΠ±Π»ΠΎΡΠ½ΠΎΠ΅ ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ ΠΏΠΎΠ±Π»ΠΎΡΠ½Π°Ρ Π·Π°ΠΏΠΈΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠ΅Π³ΠΎ ΡΠ°ΠΉΠ»Π° Π½Π΅ Π½ΡΠΆΠ΄Π°Π΅ΡΡΡ Π² ΡΠ°ΡΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ²Π°Π½ΠΈΠΈ (Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ»Π° ΠΈΠ»ΠΈ Π½Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π°) ΠΈ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ (ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠ°/ΡΠ°ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠ°), ΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π°Π΄Π°ΠΏΡΠΈΡΠΎΠ²Π°ΡΡ Producer/Consumer-ΠΏΠ°ΡΡΠ΅ΡΠ½ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π·Π°Π΄Π°ΡΠΈ, ΡΠΌ. ΠΏΡΠΎΡΡΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΌΠΎΠΉ Π²Π°ΡΠΈΠ°Π½Ρ Java Locking Queue.
ΠΡΠΎΡΠ΅ΡΡ Π°ΡΡ ΠΈΠ²Π°ΡΠΈΠΈ (ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ) ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ ΡΠ΅Π±Π΅ ΠΊΠ°ΠΊ ΡΠ»ΠΎΠΆΠ½ΡΠΉ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΡΠ±ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΊΠ°ΠΊ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΈ ΠΈ/ΠΈΠ»ΠΈ ΠΏΡΠΈΡΠΌΡΠΈΠΊΠΈ Π΄Π°Π½Π½ΡΡ ΠΎΡ ΡΠ°Π±ΠΎΡΠ½ΠΈΠΊΠΎΠ². Π‘ΡΠ±ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΡΠ΄Π°Π²Π°ΡΡ ΠΈΠ»ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅, Π»ΠΈΠ±ΠΎ ΠΈ ΠΎΡΠ΄Π°Π²Π°ΡΡ ΠΈ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ. Π Π°Π±ΠΎΡΠ½ΠΈΠΊΠΈ Π±Π΅ΡΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΡΠ±ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ°, ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΡΡ (Π΅ΡΠ»ΠΈ Π½ΡΠΆΠ½ΠΎ) ΠΈ ΠΊΠ»Π°Π΄ΡΡ Π½Π° Π΄ΡΡΠ³ΠΎΠΉ. Π Π½Π°ΡΠ°Π»Π΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π²Π·ΡΡΠΈΠ΅ [i]-ΠΎΠΉ ΡΠ°ΡΡΠΈ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° (Π±Π»ΠΎΠΊΠ° Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ [i]) ΠΎΠ΄Π½ΠΈΠΌ ΡΠ°Π±ΠΎΡΠ½ΠΈΠΊΠΎΠΌ ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ° Π΅Π³ΠΎ Π΄Π°Π»ΡΡΠ΅ Π² ΡΠ΅Π½ΡΡ. Π ΡΠ΅Π½ΡΡΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ°Π±ΠΎΡΠ½ΠΈΠΊΠΎΠ² ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ (ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΡ/ΡΠ°ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΡ) ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΡ Π±Π»ΠΎΠΊΠΎΠ² ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π² ΠΊΠΎΠ½Π΅Ρ. Π ΠΊΠΎΠ½ΡΠ΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π² ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠΈΠΉ ΡΠ°ΠΉΠ» ΡΠ°ΠΊΠΆΠ΅ ΠΎΠ΄Π½ΠΈΠΌ ΡΠ°Π±ΠΎΡΠ½ΠΈΠΊΠΎΠΌ (ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π±Π»ΠΎΠΊΠΈ ΠΌΠΎΠ³ΡΡ ΠΏΡΠΈΠΉΡΠΈ Π½Π΅ ΠΏΠΎ ΠΏΠΎΡΡΠ΄ΠΊΡ ΠΈΠ½Π΄Π΅ΠΊΡΠ° [i], ΡΠΎ ΠΏΠ΅ΡΠ΅Π΄ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ΠΌ Π² ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠΈΠΉ ΡΠ°ΠΉΠ», Π½ΡΠΆΠ½ΠΎ Π»ΠΈΠ±ΠΎ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠΈΠ²Π°ΡΡ ΠΈΡ , Π»ΠΈΠ±ΠΎ ΡΠΎΡ ΡΠ°Π½ΡΡΡ Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ).
ΠΠ°ΡΠ°Π»ΠΎ-ΠΡΡΠΎΡΠ½ΠΈΠΊ (Π²Π·ΡΡΠΈΠ΅ Π΄Π°Π½Π½ΡΡ
ΠΈΠ· ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°, ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠΎΠ² ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ° Π² ΡΡΠ±ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ ΡΡΠΈΡΠ°Π½Π½ΡΡ
Π±Π»ΠΎΠΊΠΎΠ²).
Π¦Π΅Π½ΡΡ-ΠΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠ΅-ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ (Π²Π·ΡΡΠΈΠ΅ Π±Π»ΠΎΠΊΠΎΠ² ΠΈΠ· ΡΡΠ±ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ° ΡΡΠΈΡΠ°Π½Π½ΡΡ Π±Π»ΠΎΠΊΠΎΠ², ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ° Π² ΡΡΠ±ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠΈΡ Π±Π»ΠΎΠΊΠΎΠ²).
ΠΠΎΠ½Π΅Ρ-ΠΠ°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ (Π²Π·ΡΡΠΈΠ΅ Π±Π»ΠΎΠΊΠΎΠ² ΠΈΠ· ΡΡΠ±ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ° ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠΈΡ Π±Π»ΠΎΠΊΠΎΠ², Π° Π·Π°ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ° Π² ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠΈΠΉ ΡΠ°ΠΉΠ»).
ΠΠ»Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΡΠΎΠΊΠΎΠ²-Π²ΠΎΡΠΊΠ΅ΡΠΎΠ², ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΡ Ρ ΡΡΠ±ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ°ΠΌΠΈ Π½Π° Π²Π·ΡΡΠΈΠ΅/ΠΎΡΠ΄Π°ΡΡ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ°Π·Π½ΡΡ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ²:
- Β«ΠΠ°ΡΡΠ΅ΡΠ½ ΡΡΠ»ΠΎΠ²Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉΒ» ΠΈΠ· Β«Π ΠΈΡ ΡΠ΅Ρ ΠΠΆΠ΅ΡΡΡΠΈ, CLR via C#. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅ Microsoft.NET Framework 4.5 Π½Π° ΡΠ·ΡΠΊΠ΅ C#, ΡΡΡ. 800Β», ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ a priori Π±ΠΎΠ»Π΅Π΅ Π±ΡΡΡΡΡΡ ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ ΡΠ΄ΡΠ° ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ Monitor. ΠΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ, ΡΡΠΎ ΠΊΠ»Π°ΡΡ Monitor ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΏΡΠΈΠ²ΡΠ·ΠΊΡ ΠΏΠΎΡΠΎΠΊΠ° - ΠΏΠΎΡΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ»ΡΡΠΈΠ» Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ, Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ°ΠΌ ΡΠ½ΡΡΡ Π΅Π΅, Π²ΡΠ·Π²Π°Π² ΠΌΠ΅ΡΠΎΠ΄ Monitor.Exit, ΡΡΠΎ, ΡΠ΅ΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈ, ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΡ ΡΡΠ΅Π½Π°ΡΠΈΡΡ , Π½Π΅ ΡΠΌΠΎΡΡΡ Π½Π° ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠΈΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ Monitor.Wait, Monitor.Pulse ΠΈ Monitor.PulseAll.
- SemaphorβΡ (ΠΈ ΠΈΡ Slim-Π²Π°ΡΠΈΠ°Π½ΡΡ Π΄Π»Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ Π²Π½ΡΡΡΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°), ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΠ΅ΠΌΠ°ΡΠΎΡ Π½Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΏΡΠΈΠ²ΡΠ·ΠΊΡ ΠΏΠΎΡΠΎΠΊΠ°, ΠΏΠΎΡΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ Π·Π°Π½ΡΡΡ ΡΠ΅ΠΌΠ°ΡΠΎΡ, Π° Π΄ΡΡΠ³ΠΎΠΉ ΠΏΠΎΡΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ Π΅Π³ΠΎ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡΡ.
- ΠΠ΄Π΅Π°Π»ΡΠ½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ - Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ/Π»ΠΎΠΊΠΈ, Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Interlocked - ΡΡΠΎ ΠΏΠΎΠ²ΠΎΠ΄ Π΄Π»Ρ Π±ΡΠ΄ΡΡΠ΅Π³ΠΎ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ.
- ΠΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ΡΠΎΡΠΌΠ°Ρ GZip, ΡΠΎ Π΅ΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ GZip-Π°ΡΡ ΠΈΠ²Π°ΡΠΎΡ Π½Π΅ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π΅Ρ ΡΠΎΡΠΌΠ°Ρ ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠ΅Π³ΠΎ ΡΠ°ΠΉΠ»Π° ParallelPacker. ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ, ΠΈΠ·ΡΡΠΈΠ² GZip ΡΠΎΡΠΌΠ°Ρ.
- ΠΡΠΈ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠΈ ΡΠΏΠ°ΠΊΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° Π±Π»ΠΎΠΊΠΈ Π½Π΅ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Ρ ΠΏΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΡ. ΠΠΎΠΆΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Min Heap (ΠΎΡΠ΅ΡΠ΅Π΄Ρ Ρ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠΌ) ΠΏΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΡ Π±Π»ΠΎΠΊΠ° ΠΈ Π½Π΅ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡ, ΠΏΠΎΠΊΠ° Π½Π΅ ΠΏΡΠΈΠ΄ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ.
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠ±ΡΠΈΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π½Π° ΡΠ»ΡΡΠ°ΠΉ ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ Π΄ΡΡΠ³ΠΈΠΌ Π°ΡΡ ΠΈΠ²Π°ΡΠΎΡΠΎΠΌ (Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ IPackerEngine), Π½ΠΎ ΠΈ Π½Π° Π»ΡΠ±ΠΎΠΉ ΡΠ»ΡΡΠ°ΠΉ ΡΠ°ΡΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ²Π°Π½ΠΈΡ, ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΠΉ ΠΏΠΎΠ΄ ΡΡ Π΅ΠΌΡ ΠΏΡΠΎΡΠ΅ΡΡΠ° ParallelPacker