No threads
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

No threads

on

  • 1,270 views

 

Statistics

Views

Total Views
1,270
Views on SlideShare
1,111
Embed Views
159

Actions

Likes
0
Downloads
7
Comments
0

6 Embeds 159

http://www.dimio.org 58
http://feeds.feedburner.com 51
http://dimio.org 47
url_unknown 1
http://orhowilearnedtolovetheperl.com 1
http://splog.16mb.com 1

Accessibility

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

No threads Presentation Transcript

  • 1. YAPC::Russia no threads;
  • 2. Что ждут от потоков?
    • Лёгкие (память )
    • Эффективный обмен данными
    • Выполняются параллельно
  • 3. Что ждут от потоков?
    • Лёгкие ( память )
    • Эффективный обмен данными
    • Выполняются параллельно
  • 4. Что ждут от потоков?
    • Лёгкие ( память )
    • Эффективный обмен данными
    • Выполняются параллельно
  • 5. Что ждут от потоков?
    • Лёгкие ( память )
    • Эффективный обмен данными
    • Выполняются параллельно
    • Потери на синхронизацию
  • 6. Что ждут от потоков?
    • Лёгкие ( память )
    • Эффективный обмен данными
    • Выполняются параллельно
    • Потери на синхронизацию
    • Не требуют изменений в коде?
  • 7. no Perl ?
    • PHP
    • Python
    • C++/Java/C#
    • Erlang
  • 8. Run me!
    • use threads;
    • binmode(STDOUT, ":encoding(ISO-8859-1)");
    • threads->create(sub{}) - >join();
  • 9. Run me!
    • use threads;
    • binmode(STDOUT, ":encoding(ISO-8859-1)");
    • threads->create(sub{})->join();
    segmentation fault . /perltest/threaded-sysmalloc/bin/perl -e
  • 10. Run me!
    • use threads;
    • opendir(DIR, "/");
    • threads->create(sub{})->join();
  • 11. Run me!
    • use threads;
    • opendir(DIR, "/");
    • threads->create(sub{})->join();
    segmentation fault . /perltest/threaded-sysmalloc/bin/perl -e
  • 12.
    • use threads;
    • use Large::Module;
    • use Another::Large::Module;
    • sub foo{sleep 10}
    • threads-> create (&foo) for (1..100);
    Run me!
  • 13.
    • use threads;
    • use Large::Module;
    • use Another::Large::Module;
    • sub foo{sleep 10}
    • threads-> create (&foo) for (1..100); #oom, wtf???
    Run me!
  • 14.
    • use threads;
    • use threads::shared;
    • my $bar :shared;
    • sub foo {sleep 10}
    • threads->create(&foo)->detach() for (1..10);
    • print BSD::Process->new -> rssize ;
    Run me!
  • 15.
    • use threads;
    • use threads::shared;
    • my $bar :shared;
    • sub foo {sleep 10}
    • threads->create(&foo)->detach() for (1..10);
    • print BSD::Process->new -> rssize ; # 3276
    Run me!
  • 16.
    • use threads;
    • use threads::shared;
    • my $bar :shared;
    • $bar = “a”x1_000_000;
    • sub foo {sleep 10}
    • threads->create(&foo)->detach() for (1..10);
    • print BSD::Process->new -> rssize ;
    Run me!
  • 17.
    • use threads;
    • use threads::shared;
    • my $bar :shared;
    • $bar = “a”x1_000_000;
    • sub foo {sleep 10}
    • threads->create(&foo)->detach() for (1..10);
    • print BSD::Process->new -> rssize ; # 8935
    Run me!
  • 18.
    • use threads;
    • use threads::shared;
    • my $bar :shared;
    • $bar = “a”x1_000_000; # magic inside
    • sub foo {sleep 10}
    • threads->create(&foo)->detach() for (1..10);
    • print BSD::Process->new -> rssize ;
    Run me!
  • 19. Для чего используют потоки?
    • Устранить «бутылочное горлышко»
      • Сети
      • Одного процессора
      • Диска
    • Уменьшить время отклика системы
  • 20.
    • use threads;
    • my (@a, @b);
    • @a=(0..100_000);
    • @b=@a;
    • @a=sort @a;
    • @b=sort @b;
    • time ./bin/perl test_nothr.pl
    • 0.1 9 s user 0.0 2 s system 99% cpu 0. 208 total
    Run me!
  • 21.
    • use threads;
    • my (@a, @b);
    • @a=(0..100_000);
    • @b=@a;
    • push @thr,
    • threads->create(sub{@a=sort@a}),
    • threads->create(sub{@b=sort@b});
    • $_->join() for @thr;
    • time ./bin/perl test_thr.pl
    • 1.18s user 0.15s system 147% cpu 0.898 total
    Run me!
  • 22.
    • use threads;
    • my @a :shared; my @b :shared;
    • @a=(0..100_000);
    • @b=@a;
    • push @thr,
    • threads->create(sub{@a=sort@a}),
    • threads->create(sub{@b=sort@b});
    • $_->join() for @thr;
    • time ./bin/perl test_thr.pl
    • 1. 31 s user 0.15s system 1 51 % cpu 0. 960 total
    Run me!
  • 23.
    • use threads;
    • use JSON::XS;
    • threads->create(sub {
    • JSON::XS->new->….;
    • });
    Run me!
  • 24.
    • use threads;
    • #use JSON::XS;
    • no JSON::XS;
    Run me!
  • 25. Чем заменить?
    • Сеть
      • AnyEvent
      • IO::Lambda
      • Coro
    • Диск
      • IO::Async
      • IO::AIO
    • Процессор
      • Gearman
      • plain old fork
  • 26. Run me!
    • use AnyEvent;
    • use AnyEvent::HTTP;
    • sub fetch_next{
    • my $domain = shift @list;
    • http_request
      • GET => "http://$domain/favicon.ico",
      • recurse => 0,
      • timeout => 30,
      • cookie_jar => {},
      • headers => {Referer => "http://$domain/"},
      • sub {
      • my ($data, $headers) = @_;
      • if ($headers->{'Status'} == 200){
      • #process data
      • }
      • fetch_next();
      • }
      • ;
    • }
  • 27. Не весь CPAN одинаково полезен 
    • package HTTP::Async ;
    • use Time::HiRes qw/sleep/;
    • $self->{ poll_interval } = 0.05;
    • sub _next_response {
    • sleep $self-> { poll_interval } ;
    • }
  • 28. use threads
    • GUI
    • Win
  • 29. use threads
    • pre- « fork »
    • no use
    • no globals
  • 30. Вопросы ?