{"id":42134,"date":"2019-03-18T00:00:00","date_gmt":"2019-03-17T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/uskorenie-fajlovogo-vvoda-vyvoda-c-c-ne-osobo-napryagayas"},"modified":"2020-02-18T13:44:56","modified_gmt":"2020-02-18T10:44:56","slug":"uskorenie-fajlovogo-vvoda-vyvoda-c-c-ne-osobo-napryagayas","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/uskorenie-fajlovogo-vvoda-vyvoda-c-c-ne-osobo-napryagayas","title":{"rendered":"P\u00ebrshpejtimi i hyrjes\/daljes s\u00eb skedar\u00ebve C\/C++, pa e ndjer\u00eb shum\u00eb","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"P\u00ebrshpejtimi i hyrjes\/daljes s\u00eb skedar\u00ebve C\/C++, pa e ndjer\u00eb shum\u00eb\" src=\"\/wp-content\/uploads\/2019\/03\/ed7e4c2b671c87b382572f08a411e009.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h4>Parath\u00ebnie<\/h4>\n<p>\nKa njihet nj\u00eb utilitar kaq i thjesht\u00eb dhe shum\u00eb t\u00eb dobish\u00ebm \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/jjwhitney\/BDelta\">BDelta<\/a><\/noindex>, dhe ndodhi q\u00eb ai \u00ebsht\u00eb thell\u00ebsisht i instaluar n\u00eb procesin ton\u00eb prodhues (e v\u00ebrteta \u00ebsht\u00eb se nuk arrit\u00ebm ta instalojm\u00eb versionin e tij, por me siguri nuk ishte ai m\u00eb i fundit). E p\u00ebrdorim p\u00ebr q\u00ebllimin e tij t\u00eb drejtp\u00ebrdrejt\u00eb \u2014 nd\u00ebrtimin e patch-ave binar\u00eb. N\u00ebse shikojm\u00eb \u00e7far\u00eb ka atje n\u00eb depo, b\u00ebhet pak e trishtueshme: n\u00eb thelb, ajo \u00ebsht\u00eb braktisur prej koh\u00ebsh dhe shum\u00eb prej saj jan\u00eb t\u00ebDataset e vjetra (disa modifikime jan\u00eb b\u00ebr\u00eb aty nga ish-kolegu im, por ka qen\u00eb koh\u00eb e gjat\u00eb). Pra, vendosa ta ringjall k\u00ebt\u00eb: e forkuam, hoqa at\u00eb q\u00eb nuk planifikoj t\u00eb p\u00ebrdor, e t\u00ebrhoqa projektin n\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/cmake.org\/\">cmake<\/a><\/noindex>, kam inlinuar mikrofunksionet \u201ce nxehta\u201d, heqa nga skedari array-t e m\u00ebdha (dhe array-t me gjat\u00ebsi variab\u00ebl, q\u00eb m\u00eb shqet\u00ebsojn\u00eb pa fund), e kam kaluar p\u00ebrs\u00ebri profilerin \u2014 dhe kuptova se rreth 40% e koh\u00ebs shpenzohet p\u00ebr <noindex><a rel=\"nofollow\" href=\"http:\/\/www.cplusplus.com\/reference\/cstdio\/fwrite\/\">fwrite<\/a><\/noindex>\u2026<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h4>\u00c7far\u00eb ndodh me fwrite?<\/h4>\n<p>\nN\u00eb k\u00ebt\u00eb kod fwrite (n\u00eb rastin tim konkret: nd\u00ebrtimi i nj\u00eb patch-i midis dy skedar\u00ebve t\u00eb ngjash\u00ebm prej 300 Mb, t\u00eb dh\u00ebnat totale n\u00eb memorie) thirret miliona her\u00eb me nj\u00eb buffer t\u00eb vog\u00ebl. \u00cbsht\u00eb e qart\u00eb se kjo do t\u00eb ngadal\u00ebsohet, dhe prandaj do t\u00eb doja t\u00eb ndikoj n\u00eb k\u00ebt\u00eb pa e komplikuar situat\u00ebn. Nuk kam d\u00ebshir\u00eb t\u00eb integroj lloje t\u00eb ndryshme burimesh t\u00eb dh\u00ebnash, I\/O asinkron, desha t\u00eb gjej nj\u00eb zgjidhje m\u00eb t\u00eb thjesht\u00eb. E para q\u00eb m\u00eb erdhi n\u00eb mendje ishte t\u00eb rrisja madh\u00ebsin\u00eb e buffer-it<\/p>\n<pre><code class=\"cpp\">setvbuf(file, nullptr, _IOFBF, 64 * 1024)<\/code><\/pre>\n<p>\npor nuk arrita ndonj\u00eb p\u00ebrmir\u00ebsim t\u00eb duksh\u00ebm t\u00eb rezultatit (tani fwrite kishte rreth 37% t\u00eb koh\u00ebs) \u2014 kjo tregon se problemi nuk \u00ebsht\u00eb shpesh n\u00eb shkrimin e t\u00eb dh\u00ebnave n\u00eb disk. Duke shqyrtuar \u201cn\u00ebn kapak\u201d fwrite, mund t\u00eb shihni se brenda ndodhin lock\/unlock t\u00eb struktur\u00ebs FILE p\u00ebraf\u00ebrsisht k\u00ebshtu (pseudokod, gjith\u00eb analiza \u00ebsht\u00eb b\u00ebr\u00eb n\u00ebn Visual Studio 2017):<\/p>\n<pre><code class=\"cpp\">\nsize_t fwrite (const void *buffer, size_t size, size_t count, FILE *stream)\n{\n   size_t retval = 0;\n   _lock_str(stream);   \/* lock stream *\/\n   __try\n   {\n      retval = _fwrite_nolock(buffer, size, count, stream);\n   }\n   __finally \n   {\n       _unlock_str(stream);   \/* unlock stream *\/\n   }\n   return retval;\n}\n<\/code><\/pre>\n<p>\nN\u00ebse i besoj profilerit, _fwrite_nolock merr vet\u00ebm 6% t\u00eb koh\u00ebs, e gjith\u00eb pjesa tjet\u00ebr \u00ebsht\u00eb overhead. N\u00eb rastin tim konkret, siguria e thread-it \u00ebsht\u00eb nj\u00eb luks i tepruar, t\u00eb cilin do ta sakrifikoj duke z\u00ebvend\u00ebsuar thirrjen fwrite me <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.microsoft.com\/en-us\/cpp\/c-runtime-library\/reference\/fwrite-nolock?view=vs-2017\">_fwrite_nolock<\/a><\/noindex> \u2014 as nuk ka nevoj\u00eb t\u00eb luaj me argumentet. Pra, kjo manipulim e thjesht\u00eb ndihmoi shum\u00eb n\u00eb zvog\u00eblimin e shpenzimeve p\u00ebr t\u00eb shkruar rezultatin, q\u00eb n\u00eb variantin fillestar p\u00ebrb\u00ebnte pothuajse gjysm\u00ebn e koh\u00ebs totale. P\u00ebr t\u00eb qen\u00eb i sakt\u00eb, n\u00eb bot\u00ebn POSIX ka nj\u00eb funksion t\u00eb ngjash\u00ebm \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/linux.die.net\/man\/3\/fwrite_unlocked\">fwrite_unlocked<\/a><\/noindex>. N\u00eb p\u00ebrgjith\u00ebsi, kjo vlen edhe p\u00ebr fread. K\u00ebshtu, duke p\u00ebrdorur disa #define mund t\u00eb arrijm\u00eb nj\u00eb zgjidhje krejt\u00ebsisht t\u00eb platformave pa bllokime t\u00eb panevojshme n\u00eb rastet kur ato nuk jan\u00eb t\u00eb nevojshme (ndodhin shpesh).<\/p>\n<h4>fwrite, _fwrite_nolock, setvbuf<\/h4>\n<p>\nLe t\u00eb abstrahohemi nga projekti origjinal dhe t\u00eb merremi me testimin e nj\u00eb rasti t\u00eb ve\u00e7ant\u00eb: shkrimi i nj\u00eb skedari t\u00eb madh (512 Mb) n\u00eb porsona shum\u00eb t\u00eb vegj\u00ebl \u2014 n\u00eb 1 byte. Sistemi testues: AMD Ryzen 7 1700, 16 GB RAM, HDD 7200 rpm 64 Mb cache, Windows 10 1809, binari ishte nd\u00ebrtuar 32-bit, optimizimet ishin aktivizuar, biblioteka ishte e lidhur statikisht.<\/p>\n<p>Shembulli p\u00ebr t\u00eb kryer eksperimentin:<\/p>\n<pre><code class=\"cpp\">\n#include &lt;chrono&gt;\n#include &lt;cstdio&gt;\n#include &lt;inttypes.h&gt;\n#include &lt;memory&gt;\n\n#ifdef _MSC_VER\n#define fwrite_unlocked _fwrite_nolock\n#endif\n\nusing namespace std::chrono;\n\nint main()\n{\n    std::unique_ptr&lt;FILE, int(*)(FILE*)&gt; file(fopen(\"test.bin\", \"wb\"), fclose);\n    if (!file)\n        return 1;\n\n    constexpr size_t TEST_BUFFER_SIZE = 256 * 1024;\n    if (setvbuf(file.get(), nullptr, _IOFBF, TEST_BUFFER_SIZE) != 0)\n        return 2;\n\n    auto start = steady_clock::now();\n    const uint8_t b = 77;\n    constexpr size_t TEST_FILE_SIZE = 512 * 1024 * 1024;\n    for (size_t i = 0; i &lt; TEST_FILE_SIZE; ++i)\n        fwrite_unlocked(&amp;b, 1, sizeof(b), file.get());\n\n    auto end = steady_clock::now();\n    auto interval = duration_cast&lt;microseconds&gt;(end - start);\n    printf(\"Time: %lldn\", interval.count());\n\n    return 0;\n}\n<\/code><\/pre>\n<p>\nSi variabla do t\u00eb sh\u00ebrbejn\u00eb TEST_BUFFER_SIZE, dhe gjithashtu p\u00ebr disa raste do t\u00eb z\u00ebvend\u00ebsojm\u00eb fwrite_unlocked me fwrite. Le t\u00eb fillojm\u00eb me rastin fwrite pa vendosur madh\u00ebsin\u00eb e buffer-it (do ta komentojm\u00eb setvbuf dhe kodin p\u00ebrkat\u00ebs): koha 27048906 \u03bcs, shpejt\u00ebsia e shkrimit \u2014 18.93 Mb\/s. Tani do t\u00eb vendosim madh\u00ebsin\u00eb e buffer-it n\u00eb 64 KB: koha \u2014 25037111 \u03bcs, shpejt\u00ebsia \u2014 20.44 Mb\/s. Tani do t\u00eb testojm\u00eb funksionimin e _fwrite_nolock pa thirrjen e setvbuf: 7262221 \u03bcs, shpejt\u00ebsia \u2014 70.5 Mb\/s! <\/p>\n<p>Pastaj do t\u00eb eksperimentojm\u00eb me madh\u00ebsin\u00eb e buffer-it (setvbuf):<\/p>\n<p><img decoding=\"async\" alt=\"P\u00ebrshpejtimi i hyrjes\/daljes s\u00eb skedar\u00ebve C\/C++, pa e ndjer\u00eb shum\u00eb\" src=\"\/wp-content\/uploads\/2019\/03\/6d7998d805ec2e3f0a7905251c664e5c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nT\u00eb dh\u00ebnat jan\u00eb marr\u00eb nga mesatarizimi i 5 eksperimenteve, nuk u mundova t\u00eb llogaris ndonj\u00eb gabim. Sipas meje, 93 Mb\/s kur shkruhet 1 byte n\u00eb nj\u00eb HDD t\u00eb zakonsh\u00ebm \u2014 kjo \u00ebsht\u00eb nj\u00eb rezultat shum\u00eb i mir\u00eb, vet\u00ebm duhet t\u00eb zgjidhni madh\u00ebsin\u00eb optimale t\u00eb buffer-it (n\u00eb rastin tim 256 KB \u2014 \u00ebsht\u00eb m\u00eb se e p\u00ebrshtatshme) dhe z\u00ebvend\u00ebsoni fwrite me _fwrite_nolock\/fwrite_unlocked (n\u00eb rast se nuk k\u00ebrkohet siguria e thread-it, sigurisht). <br \/>\npo ashtu edhe p\u00ebr fread n\u00eb k\u00ebto kushte. Duke par\u00eb se nuk kam nj\u00eb makin\u00eb fizike me linux pran\u00eb (nje laptop eshte marre parasysh), vendosa t\u00eb kryej nj\u00eb eksperiment t\u00eb kufizuar n\u00eb nj\u00eb makin\u00eb virtuale (Hyper-V, OpenSUSE 15, GCC 8.3.1) \u2014 lidhja \u00ebsht\u00eb gjithashtu e nj\u00ebjt\u00eb: fwrite e past\u00ebr 20 Mb\/s, fwrite + buffer n\u00eb 256 KB dha 23 Mb\/s, fwrite_unlocked me t\u00eb nj\u00ebjtin buffer \u2014 35 Mb\/s (binari 64-bit, u nd\u00ebrtua g++ -o2 -s -static-libgcc -static-libstdc++ fwrite_test.cpp -o fwrite_test).<\/p>\n<h4>Pasth\u00ebnie<\/h4>\n<p>\nQ\u00ebllimi i k\u00ebsaj artikulli ishte p\u00ebrshkrimi i nj\u00eb truku t\u00eb thjesht\u00eb dhe efektiv n\u00eb shum\u00eb raste (me funksionet _fwrite_nolock\/fwrite_unlocked nuk isha p\u00ebrballur m\u00eb par\u00eb, nuk jan\u00eb shum\u00eb popullore \u2014 dhe kot). Nuk pretendoj p\u00ebr novatoriz\u00ebm, por shpresoj q\u00eb artikulli do t\u00eb jet\u00eb i dobish\u00ebm p\u00ebr komunitetin.<\/p>\n<p>Burimi: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/444036\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0435\u0434\u0438\u0441\u043b\u043e\u0432\u0438\u0435 \u0415\u0441\u0442\u044c \u043d\u0430 \u0441\u0432\u0435\u0442\u0435 \u0442\u0430\u043a\u0430\u044f \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0438 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u0430\u044f \u0443\u0442\u0438\u043b\u0438\u0442\u0430 \u2014 BDelta, \u0438 \u0442\u0430\u043a \u0432\u044b\u0448\u043b\u043e, \u0447\u0442\u043e \u043e\u043d\u0430 \u043e\u0447\u0435\u043d\u044c \u0434\u0430\u0432\u043d\u043e \u0443\u043a\u043e\u0440\u0435\u043d\u0438\u043b\u0430\u0441\u044c \u0432 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 (\u043f\u0440\u0430\u0432\u0434\u0430 \u0435\u0451 \u0432\u0435\u0440\u0441\u0438\u044e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c, \u043d\u043e \u043e\u043d\u0430 \u0442\u043e\u0447\u043d\u043e \u0431\u044b\u043b\u0430 \u043d\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0439). \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0435\u0451 \u043f\u043e \u043f\u0440\u044f\u043c\u043e\u043c\u0443 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e \u2014 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0445 \u043f\u0430\u0442\u0447\u0435\u0439. \u0415\u0441\u043b\u0438 \u0432\u0437\u0433\u043b\u044f\u043d\u0443\u0442\u044c, \u0447\u0442\u043e \u0442\u0430\u043c \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438, \u2014 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0441\u043b\u0435\u0433\u043a\u0430 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-42134","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0435\u0434\u0438\u0441\u043b\u043e\u0432\u0438\u0435 \u0415\u0441\u0442\u044c \u043d\u0430 \u0441\u0432\u0435\u0442\u0435 \u0442\u0430\u043a\u0430\u044f \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0438 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u0430\u044f \u0443\u0442\u0438\u043b\u0438\u0442\u0430 \u2014 BDelta, \u0438 \u0442\u0430\u043a \u0432\u044b\u0448\u043b\u043e, \u0447\u0442\u043e \u043e\u043d\u0430 \u043e\u0447\u0435\u043d\u044c \u0434\u0430\u0432\u043d\u043e \u0443\u043a\u043e\u0440\u0435\u043d\u0438\u043b\u0430\u0441\u044c \u0432 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 (\u043f\u0440\u0430\u0432\u0434\u0430 \u0435\u0451 \u0432\u0435\u0440\u0441\u0438\u044e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c, \u043d\u043e \u043e\u043d\u0430 \u0442\u043e\u0447\u043d\u043e \u0431\u044b\u043b\u0430 \u043d\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0439). \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0435\u0451 \u043f\u043e \u043f\u0440\u044f\u043c\u043e\u043c\u0443 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e \u2014 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0445 \u043f\u0430\u0442\u0447\u0435\u0439. \u0415\u0441\u043b\u0438 \u0432\u0437\u0433\u043b\u044f\u043d\u0443\u0442\u044c, \u0447\u0442\u043e \u0442\u0430\u043c \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438, \u2014 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0441\u043b\u0435\u0433\u043a\u0430\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/uskorenie-fajlovogo-vvoda-vyvoda-c-c-ne-osobo-napryagayas\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"sq_AL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0423\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0433\u043e \u0432\u0432\u043e\u0434\u0430-\u0432\u044b\u0432\u043e\u0434\u0430 C\/C++, \u043d\u0435 \u043e\u0441\u043e\u0431\u043e \u043d\u0430\u043f\u0440\u044f\u0433\u0430\u044f\u0441\u044c | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0435\u0434\u0438\u0441\u043b\u043e\u0432\u0438\u0435 \u0415\u0441\u0442\u044c \u043d\u0430 \u0441\u0432\u0435\u0442\u0435 \u0442\u0430\u043a\u0430\u044f \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0438 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u0430\u044f \u0443\u0442\u0438\u043b\u0438\u0442\u0430 \u2014 BDelta, \u0438 \u0442\u0430\u043a \u0432\u044b\u0448\u043b\u043e, \u0447\u0442\u043e \u043e\u043d\u0430 \u043e\u0447\u0435\u043d\u044c \u0434\u0430\u0432\u043d\u043e \u0443\u043a\u043e\u0440\u0435\u043d\u0438\u043b\u0430\u0441\u044c \u0432 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 (\u043f\u0440\u0430\u0432\u0434\u0430 \u0435\u0451 \u0432\u0435\u0440\u0441\u0438\u044e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c, \u043d\u043e \u043e\u043d\u0430 \u0442\u043e\u0447\u043d\u043e \u0431\u044b\u043b\u0430 \u043d\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0439). \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0435\u0451 \u043f\u043e \u043f\u0440\u044f\u043c\u043e\u043c\u0443 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e \u2014 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0445 \u043f\u0430\u0442\u0447\u0435\u0439. \u0415\u0441\u043b\u0438 \u0432\u0437\u0433\u043b\u044f\u043d\u0443\u0442\u044c, \u0447\u0442\u043e \u0442\u0430\u043c \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438, \u2014 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0441\u043b\u0435\u0433\u043a\u0430\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/uskorenie-fajlovogo-vvoda-vyvoda-c-c-ne-osobo-napryagayas\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-03-17T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T10:44:56+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Accelerimi i hyrjes dhe daljes s\u00eb skedar\u00ebve C\/C++, pa u lodhur shum\u00eb | ProHoster","description":"Parath\u00ebnie Ekziston nj\u00eb utilitar i thjesht\u00eb dhe shum\u00eb i dobish\u00ebm \u2014 BDelta, dhe ndodhi q\u00eb ai \u00ebsht\u00eb ngulitur prej koh\u00ebsh n\u00eb procesin ton\u00eb t\u00eb prodhimit (me t\u00eb v\u00ebrtet\u00eb nuk arrit\u00ebm t\u00eb instalojm\u00eb versionin e saj, por ajo me siguri nuk ishte m\u00eb e reja e disponueshme). E p\u00ebrdorim p\u00ebr q\u00ebllimin e saj t\u00eb drejtp\u00ebrdrejt\u00eb \u2014 nd\u00ebrtimin e patch-eve binar\u00eb. N\u00ebse shikoni se \u00e7far\u00eb ka n\u00eb depo, b\u00ebhet pak","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/uskorenie-fajlovogo-vvoda-vyvoda-c-c-ne-osobo-napryagayas","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sq_AL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0423\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0433\u043e \u0432\u0432\u043e\u0434\u0430-\u0432\u044b\u0432\u043e\u0434\u0430 C\/C++, \u043d\u0435 \u043e\u0441\u043e\u0431\u043e \u043d\u0430\u043f\u0440\u044f\u0433\u0430\u044f\u0441\u044c | ProHoster","og:description":"\u041f\u0440\u0435\u0434\u0438\u0441\u043b\u043e\u0432\u0438\u0435 \u0415\u0441\u0442\u044c \u043d\u0430 \u0441\u0432\u0435\u0442\u0435 \u0442\u0430\u043a\u0430\u044f \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0438 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u0430\u044f \u0443\u0442\u0438\u043b\u0438\u0442\u0430 \u2014 BDelta, \u0438 \u0442\u0430\u043a \u0432\u044b\u0448\u043b\u043e, \u0447\u0442\u043e \u043e\u043d\u0430 \u043e\u0447\u0435\u043d\u044c \u0434\u0430\u0432\u043d\u043e \u0443\u043a\u043e\u0440\u0435\u043d\u0438\u043b\u0430\u0441\u044c \u0432 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 (\u043f\u0440\u0430\u0432\u0434\u0430 \u0435\u0451 \u0432\u0435\u0440\u0441\u0438\u044e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c, \u043d\u043e \u043e\u043d\u0430 \u0442\u043e\u0447\u043d\u043e \u0431\u044b\u043b\u0430 \u043d\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0439). \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0435\u0451 \u043f\u043e \u043f\u0440\u044f\u043c\u043e\u043c\u0443 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e \u2014 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0445 \u043f\u0430\u0442\u0447\u0435\u0439. \u0415\u0441\u043b\u0438 \u0432\u0437\u0433\u043b\u044f\u043d\u0443\u0442\u044c, \u0447\u0442\u043e \u0442\u0430\u043c \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438, \u2014 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0441\u043b\u0435\u0433\u043a\u0430","og:url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/uskorenie-fajlovogo-vvoda-vyvoda-c-c-ne-osobo-napryagayas","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-03-17T21:00:00+00:00","article:modified_time":"2020-02-18T10:44:56+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"42134","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-22 07:22:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 00:05:22","updated":"2026-01-22 07:22:19"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/42134","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/comments?post=42134"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/42134\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=42134"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=42134"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=42134"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}