16GB рдЦрд╛рд▓реА рдард╛рдЙрдБ рднрдПрдХреЛ рдЯреНрдпрд╛рдмреНрд▓реЗрдЯ рдорд╛рд░реНрдлрдд 4GB рдЯреЛрд░реЗрдиреНрдЯ рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░реНрджреИ

16GB рдЦрд╛рд▓реА рдард╛рдЙрдБ рднрдПрдХреЛ рдЯреНрдпрд╛рдмреНрд▓реЗрдЯ рдорд╛рд░реНрдлрдд 4GB рдЯреЛрд░реЗрдиреНрдЯ рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░реНрджреИ

рдХрд╛рд░реНрдп:

рдЗрдиреНрдЯрд░рдиреЗрдЯ рдмрд┐рдирд╛ рдПрдХ рдкреАрд╕реА рдЫ, рддрд░ рдпреЛ USB рдорд╛рд░реНрдлрдд рдлрд╛рдЗрд▓ рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг рдЧрд░реНрди рд╕рдореНрднрд╡ рдЫред рддреНрдпрд╣рд╛рдБ рдЗрдиреНрдЯрд░рдиреЗрдЯрдХреЛ рд╕рд╛рде рдПрдЙрдЯрд╛ рдЯреНрдпрд╛рдмреНрд▓реЗрдЯ рдЫ рдЬрд╣рд╛рдБрдмрд╛рдЯ рдпреЛ рдлрд╛рдЗрд▓ рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред рддрдкрд╛рдИрдВрд▓реЗ рдЖрдлреНрдиреЛ рдЯреНрдпрд╛рдмреНрд▓реЗрдЯрдорд╛ рдЖрд╡рд╢реНрдпрдХ рдЯреЛрд░реЗрдиреНрдЯ рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рддрд░ рддреНрдпрд╣рд╛рдБ рдкрд░реНрдпрд╛рдкреНрдд рдЦрд╛рд▓реА рдард╛рдЙрдБ рдЫреИрдиред рдЯреЛрд░реЗрдиреНрдЯрдорд╛ рд░рд╣реЗрдХреЛ рдлрд╛рдЗрд▓ рдПрдХ рд░ рдареВрд▓реЛ рдЫред

рд╕рдорд╛рдзрд╛рдирдХреЛ рдмрд╛рдЯреЛ:

рдореИрд▓реЗ рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░реНрди рдЯреЛрд░реЗрдиреНрдЯ рд╕реБрд░реБ рдЧрд░реЗрдВред рдЬрдм рдЦрд╛рд▓реА рдард╛рдЙрдБ рд▓рдЧрднрдЧ рд╕рдХрд┐рдпреЛ, рдореИрд▓реЗ рдбрд╛рдЙрдирд▓реЛрдб рдкрдЬ рдЧрд░реЗрдВред рдореИрд▓реЗ рдЯреНрдпрд╛рдмреНрд▓реЗрдЯрд▓рд╛рдИ PC рдорд╛ рдЬрдбрд╛рди рдЧрд░реЗрдВ рд░ рдлрд╛рдЗрд▓рд▓рд╛рдИ рдЯреНрдпрд╛рдмреНрд▓реЗрдЯрдмрд╛рдЯ PC рдорд╛ рд╕рд╛рд░рд┐рдпреЛред рдореИрд▓реЗ рдкрдЬ рдЧрд░реЗрдВ рд░ рдореЗрд░реЛ рдЖрд╢реНрдЪрд░реНрдпрдорд╛ рдлрд╛рдЗрд▓ рдлреЗрд░рд┐ рд╕рд┐рд░реНрдЬрдирд╛ рднрдпреЛ рд░ рдЯреЛрд░реЗрдиреНрдЯрд▓реЗ рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░реНрди рдЬрд╛рд░реА рд░рд╛рдЦреНрдпреЛ рдорд╛рдиреМрдВ рдХреЗрд╣реА рднрдПрдХреЛ рдЫреИрдиред

рдЯреЛрд░реЗрдиреНрдЯ рдХреНрд▓рд╛рдЗрдиреНрдЯрд▓реЗ рдкреНрд░рд╛рдкреНрдд рдбрд╛рдЯрд╛ рд▓реЗрдЦреНрдиреЗ рдлрд╛рдЗрд▓рдорд╛ рд╕реНрдкрд╛рд░реНрд╕ рдлреНрд▓реНрдпрд╛рдЧ рд╕реЗрдЯ рдЧрд░реНрдиреЗ рддрдереНрдпрдХреЛ рдХрд╛рд░рдгрд▓реЗ рдЧрд░реНрджрд╛, рдкреНрд░рдгрд╛рд▓реАрд▓реЗ рдПрдХреИрдЪреЛрдЯрд┐ 16GB рд░рд┐рдЬрд░реНрдн рдЧрд░реНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрджреИрди рд░ 4GB рднрдиреНрджрд╛ рдорд╛рдерд┐рдХреЛ рдлрд╛рдЗрд▓рдорд╛ рд▓реЗрдЦреНрди рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрджрд╛ рддреНрд░реБрдЯрд┐ рджреЗрдЦрд╛ рдкрд░реНрджреИрдиред

рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЪрд╛рд░ рдкрдЯрдХ рджреЛрд╣реЛрд░реНрдпрд╛рдПрд░, рдореИрд▓реЗ рдореЗрд░реЛ рдкреАрд╕реАрдорд╛ рдПрдЙрдЯреИ рдЯреЛрд░реЗрдиреНрдЯрдХрд╛ рд╡рд┐рднрд┐рдиреНрди рднрд╛рдЧрд╣рд░реВ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реА рдЪрд╛рд░ рдлрд╛рдЗрд▓рд╣рд░реВ рдкреНрд░рд╛рдкреНрдд рдЧрд░реЗрдВред рдЕрдм рдмрд╛рдБрдХреА рд╕рдмреИ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдПрдХрд╕рд╛рде рд░рд╛рдЦреНрдиреБ рд╣реЛред рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдкрдорд╛ рд╕рд░рд▓ рдЫред рддрдкрд╛рдИрдВрд▓реЗ рд╢реВрдиреНрдп рдмрд╛рдЗрдЯрд╣рд░реВрд▓рд╛рдИ рдЕрд░реНрдХреЛ рдорд╛рдирд╕рдБрдЧ рдмрджрд▓реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ рдпрджрд┐ рдпреЛ рдЪрд╛рд░ рдлрд╛рдЗрд▓рд╣рд░реВ рдордзреНрдпреЗ рдПрдХрдорд╛ рджрд┐рдЗрдПрдХреЛ рд╕реНрдерд┐рддрд┐рдорд╛ рдЕрд╡рд╕реНрдерд┐рдд рдЫред

рдпрд╕реНрддреЛ рд╕рд░рд▓ рдХрд╛рд░реНрдпрдХреНрд░рдо рдЗрдиреНрдЯрд░рдиреЗрдЯрдорд╛ рд╣реБрдиреБрдкрд░реНрдЫ рднрдиреНрдиреЗ рдорд▓рд╛рдИ рд▓рд╛рдЧреНрдереНрдпреЛред рдХреЗ рдХрд╕реИрд▓реЗ рдпрд╕реНрддреЛ рд╕рдорд╕реНрдпрд╛ рд╕рд╛рдордирд╛ рдЧрд░реЗрдХреЛ рдЫреИрди? рддрд░ рдореИрд▓реЗ рдорд╣рд╕реБрд╕ рдЧрд░реЗрдВ рдХрд┐ рдорд▓рд╛рдИ рдпреЛ рдкрдирд┐ рдерд╛рд╣рд╛ рдЫреИрди рдХрд┐ рдХреБрди рд╢рдмреНрджрд╣рд░реВ рдЦреЛрдЬреНрдиреЗ рд╣реЛред рддреНрдпрд╕рдХрд╛рд░рдг, рдореИрд▓реЗ рдпрд╕ рдХрд╛рд░реНрдпрдХреЛ рд▓рд╛рдЧрд┐ рджреНрд░реБрдд рд░реВрдкрдорд╛ рд▓реБрдЖ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реЗрдВ рд░ рдЕрдм рдореИрд▓реЗ рдпрд╕рд▓рд╛рдИ рдЕрдкреНрдЯрд┐рдорд╛рдЗрдЬ рдЧрд░реЗрдХреЛ рдЫреБред рдпреЛ рдо рд╕рд╛рдЭрд╛ рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдЫреБред

рднрд╛рдЧрд╣рд░реВрдорд╛ рдЯреЛрд░реЗрдиреНрдЯ рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░реНрджреИ

  1. рдкрд╣рд┐рд▓реЛ рдпрдиреНрддреНрд░рдорд╛ рдЯреЛрд░реЗрдиреНрдЯ рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░реНрди рд╕реБрд░реБ рдЧрд░реНрдиреБрд╣реЛрд╕реН
  2. ROM рднрд░рд┐рдПрд╕рдореНрдо рдкрд░реНрдЦрдиреБрд╣реЛрд╕реН
  3. рдбрд╛рдЙрдирд▓реЛрдб рд░реЛрдХреНрдиреБрд╣реЛрд╕реН
  4. рдлрд╛рдЗрд▓рд▓рд╛рдИ рджреЛрд╕реНрд░реЛ рдЙрдкрдХрд░рдгрдорд╛ рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг рдЧрд░реНрдиреБрд╣реЛрд╕реН рд░ рдлрд╛рдЗрд▓ рдирд╛рдордорд╛ рдирдореНрдмрд░ рдердкреНрдиреБрд╣реЛрд╕реН
  5. рдлрд╛рдЗрд▓ рдкреВрд░реНрдг рд░реВрдкрдорд╛ рдбрд╛рдЙрдирд▓реЛрдб рдирднрдПрд╕рдореНрдо рд╣рд╛рдореА рдкрд╣рд┐рд▓реЛ рдмрд┐рдиреНрджреБрдорд╛ рдлрд░реНрдХрдиреНрдЫреМрдВ

рднрд╛рдЧрд╣рд░реВ рдПрдХ рдлрд╛рдЗрд▓рдорд╛ рдорд░реНрдЬ рдЧрд░реНрджреИ

рдЕрдиреНрддрд┐рдо рднрд╛рдЧ рдкреНрд░рд╛рдкреНрдд рднрдПрдкрдЫрд┐, рдпреЛ рдПрдХ рд╕рдореНрдкреВрд░реНрдг рдлрд╛рдЗрд▓рдорд╛ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рд╕рдЩреНрдХрд▓рди рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред

рдХрд╛рд░реНрдп рд╕рд░рд▓ рдЫ:

  1. рд╕рдмреИ рднрд╛рдЧрд╣рд░реВ рдПрдХреИрдЪреЛрдЯрд┐ рдкрдвреНрдиреБрд╣реЛрд╕реН
  2. рдпрджрд┐ рдХреБрдиреИ рднрд╛рдЧрдорд╛ рд╕реНрдерд┐рддрд┐ рд╢реВрдиреНрдп рдмрд╛рдЗрдЯ рдЫреИрди рднрдиреЗ, рд╣рд╛рдореА рдпрд╕рд▓рд╛рдИ рдЖрдЙрдЯрдкреБрдЯрдорд╛ рд▓реЗрдЦреНрдЫреМрдВ, рдЕрдиреНрдпрдерд╛ рд╣рд╛рдореА рд╢реВрдиреНрдп рд▓реЗрдЦреНрдЫреМрдВред

рд╕рдорд╛рд░реЛрд╣ merge_part рдереНрд░реЗрдбрд╣рд░реВрдХреЛ рдПрд░реНрд░реЗ рд╕реНрд╡реАрдХрд╛рд░ рдЧрд░реНрджрдЫ streams_in рдЬрд╕рдХреЛ рдЖрдХрд╛рд░рдХреЛ рдЕрдВрд╢ рдкрдвреНрдЫ buffer_length рд░ рд╡рд┐рднрд┐рдиреНрди рдереНрд░реЗрдбрд╣рд░реВрдмрд╛рдЯ рднрд╛рдЧрд╣рд░реВ рдорд░реНрдЬ рдЧрд░реНрдиреЗ рдкрд░рд┐рдгрд╛рдо рдлрд░реНрдХрд╛рдЙрдБрдЫред

function merge_part(streams_in, buffer_length)
    local out_part
    for _, stream in ipairs(streams_in) do
        local in_part = stream:read(buffer_length)

        if not out_part then
            out_part = in_part -- ╨┐╤А╨╛╤Б╤В╨╛ ╨║╨╛╨┐╨╕╤А╤Г╨╡╨╝ ╤З╨░╤Б╤В╤М ╨╕╨╖ ╨┐╨╡╤А╨▓╨╛╨│╨╛ ╤Д╨░╨╣╨╗╨░
        elseif in_part and #in_part > 0 then

            if #out_part < #in_part then
                out_part, in_part = in_part, out_part
            end

            if out_part ~= in_part  -- ╨┤╨░╨╜╨╜╤Л╨╡ ╤А╨░╨╖╨╗╨╕╤З╨░╤О╤В╤Б╤П
                and in_part:find("[^ ]")   -- ╨╡╤Б╤В╤М ╨┤╨░╨╜╨╜╤Л╨╡ ╨▓ in_part
                and out_part:find(" ", 1, true) -- ╨╡╤Б╤В╤М ╨┐╤Г╤Б╤В╤Л╨╡ ╨╝╨╡╤Б╤В╨░ ╨▓ out_part
            then 
                local find_index = 1
--[[

рд╕рдорд╛рд░реЛрд╣ string.gsub рдпреЛ рдХрд╛рд░реНрдпрдХреЛ рд▓рд╛рдЧрд┐ рдЙрдкрдпреБрдХреНрдд рдЫ рдХрд┐рдирднрдиреЗ рдпрд╕рд▓реЗ рд╢реВрдиреНрдпрд▓реЗ рднрд░рд┐рдПрдХреЛ рдЯреБрдХреНрд░рд╛рд╣рд░реВ рдлреЗрд▓рд╛ рдкрд╛рд░реНрдиреЗрдЫ рд░ рдпрд╕рд▓рд╛рдИ рджрд┐рдЗрдПрдХреЛ рдХреБрд░рд╛рд╣рд░реВ рдкреНрд░рджрд╛рди рдЧрд░реНрдиреЗрдЫред

--]]
                out_part = out_part:gsub(" +", function(zero_string)

                    if #in_part < find_index then
                        return -- ╨╜╨╡ ╨╜╨░ ╤З╤В╨╛ ╨╝╨╡╨╜╤П╤В╤М
                    end
--[[

string.gsub рдореНрдпрд╛рдЪ рдлреЗрд▓рд╛ рдкрд░реЗрдХреЛ рд╕реНрдерд┐рддрд┐ рдмрддрд╛рдЙрдБрджреИрдиред рддреНрдпрд╕рдХрд╛рд░рдг, рд╣рд╛рдореА рд╕реНрдерд┐рддрд┐рдХреЛ рд▓рд╛рдЧрд┐ рд╕рдорд╛рдирд╛рдиреНрддрд░ рдЦреЛрдЬреА рдЧрд░реНрдЫреМрдВ zero_string рдкреНрд░рдХрд╛рд░реНрдп рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджреИ string.findред рдпреЛ рдкрд╣рд┐рд▓реЛ рд╢реВрдиреНрдп рдмрд╛рдЗрдЯ рдлреЗрд▓рд╛ рдкрд╛рд░реНрди рдкрд░реНрдпрд╛рдкреНрдд рдЫред

--]]
                    local start_index = out_part:find(" ", find_index, true)
                    find_index = start_index + #zero_string

--[[

рдЕрдм рдпрджрд┐ рдорд╛ in_part рдХреЛ рд▓рд╛рдЧрд┐ рдбрд╛рдЯрд╛ рдЫ out_part рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдЧрд░реНрдиреБрд╣реЛрд╕реНред

--]]
                    if #in_part >= start_index then
                        local end_index = start_index + #zero_string - 1
--[[

рдмрд╛рдЯ рдХрд╛рдЯреНрдиреБрд╣реЛрд╕реН in_part рд╢реВрдиреНрдп рдХреЛ рдХреНрд░рдо рд╕рдВрдЧрдд рднрд╛рдЧред

--]]
                        local part = in_part:sub(start_index, end_index)

                        if (part:byte(1) ~= 0) or part:find("[^ ]") then
--[[

╨Т part рддреНрдпрд╣рд╛рдБ рдбрд╛рдЯрд╛ рдЫред

--]]
                            if #part == #zero_string then
                                return part
                            else
--[[

part рд╢реВрдиреНрдпрдХреЛ рдЕрдиреБрдХреНрд░рдо рднрдиреНрджрд╛ рдХрдо рднрдпреЛред рддрд┐рдиреАрд╣рд░реВрд╕рдБрдЧ рдпреЛ рдкреВрд░рдХ рдЧрд░реМрдВред

--]]
                                return part..zero_string:sub(1, end_index - #in_part)
                            end
                        end
                    end
                end)
            end
        end
    end
    return out_part
end

рдирд┐рд╖реНрдХрд░реНрд╖рдорд╛

рдпрд╕рд░реА, рд╣рд╛рдореАрд▓реЗ рдпреЛ рдлрд╛рдЗрд▓рд▓рд╛рдИ рдкреАрд╕реАрдорд╛ рдбрд╛рдЙрдирд▓реЛрдб рд░ рдПрд╕реЗрдореНрдмрд▓ рдЧрд░реНрди рд╕рдХреНрд╖рдо рднрдпреМрдВред рдорд░реНрдЬрд░ рдкрдЫрд┐, рдореИрд▓реЗ рдЯреНрдпрд╛рдмреНрд▓реЗрдЯрдмрд╛рдЯ рдЯреЛрд░реЗрдиреНрдЯ рдлрд╛рдЗрд▓ рдирд┐рдХрд╛рд▓реЗрдВред рдореИрд▓реЗ рдореЗрд░реЛ рдкреАрд╕реАрдорд╛ рдЯреЛрд░реЗрдиреНрдЯ рдХреНрд▓рд╛рдЗрдиреНрдЯ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реЗрдВ рд░ рдпрд╕рдХреЛ рд╕рд╛рде рдлрд╛рдЗрд▓ рдЬрд╛рдБрдЪ рдЧрд░реЗрдВред

рдЯреНрдпрд╛рдмреНрд▓реЗрдЯрдорд╛ рдЕрдиреНрддрд┐рдо рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░рд┐рдПрдХреЛ рднрд╛рдЧ рд╡рд┐рддрд░рдгрдорд╛ рдЫреЛрдбреНрди рд╕рдХрд┐рдиреНрдЫ, рддрд░ рддрдкрд╛рдИрдВрд▓реЗ рдпреЛ рднрдиреНрджрд╛ рдкрд╣рд┐рд▓реЗ рднрд╛рдЧрд╣рд░реВрдХреЛ рдкреБрди: рдЬрд╛рдБрдЪ рд╕рдХреНрд╖рдо рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ рд░ рдлрд╛рдЗрд▓рд▓рд╛рдИ рдЕрдирдЪреЗрдХ рдЧрд░реНрдиреБрд╣реЛрд╕реН рддрд╛рдХрд┐ рдпреЛ рдлреЗрд░рд┐ рдбрд╛рдЙрдирд▓реЛрдб рдирдЧрд░реНрдиреБрд╣реЛрд╕реНред

рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдПрдХреЛ:

  1. рдЯреНрдпрд╛рдмреНрд▓реЗрдЯрдорд╛ рдлреНрд▓рдб рдЯреЛрд░реЗрдиреНрдЯ рдЧреНрд░рд╛рд╣рдХред
  2. PC рдорд╛ рдЯреЛрд░реЗрдиреНрдЯ рдЧреНрд░рд╛рд╣рдХ qBittorentред
  3. рд▓реБрдЖ рд▓рд┐рдкрд┐

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди