Bezbolesne Programowanie Współbieżne
|
|
- Edyta Owczarek
- 8 lat temu
- Przeglądów:
Transkrypt
1 Bezbolesne Programowanie Współbieżne Konrad Siek 26 III 2014
2 Lata 90-te???
3 Częstotliwość procesorów Tranzystory Rok
4 Lata 90-te My new computer s got the clocks, it rocks, but it was obsolete before I opened the box. You say you ve had your desktop for over a week? Throw that junk away, man, it s an antique. Your laptop is a month old? Well, that s great. If you could use a nice, heavy paperweight... It s all about the Pentiums, Weird Al, 1999
5 Częstotliwość procesorów Taktowanie [MHz] Rok
6 Prawo Moore-a in action Tranzystory 0.0e e Rok
7 Liczby rdzeni w procesorach Rdzenie Rok
8 Od rdzeni Współbieżność
9 Od rdzeni Współbieżność... ale współbieżność boli
10 ... boli?
11 Rzeczy których nie lubie Szukanie bugów (bagów?) Wrzucanie kodu strukturalnego do funkcjonalnego Rozwiązywanie problemów synchronizacji
12 Rzeczy których nie lubie Szukanie bugów (bagów?) Wrzucanie kodu strukturalnego do funkcjonalnego Rozwiązywanie problemów synchronizacji
13 Rzeczy których nie lubie Szukanie Heisenbugów Wrzucanie kodu strukturalnego do funkcjonalnego Rozwiązywanie problemów synchronizacji
14 Heisenbug
15 Rzeczy których nie lubie Szukanie Heisenbugów Wrzucanie kodu strukturalnego do funkcjonalnego Rozwiązywanie problemów synchronizacji
16 Rzeczy których nie lubie Szukanie Heisenbugów Wrzucanie kodu strukturalnego do funkcjonalnego Rozwiązywanie problemów synchronizacji
17 Wrzucanie kodu strukturalnego do funkcjonalnego class Elem: def init (self, transaction, t, next): self.transaction = transaction self.t = t self.next = next _head = None def insert(transaction, t): if _head is None: _head = Elem(transaction, t, None) return elem = _head while True: if elem.t <= t: temp = Elem(elem.transaction, elem.t, elem.next) elem.transaction = transaction elem.t = t elem.next = temp return else: if elem.next: elem = elem.next else: elem.next = Elem(transaction, t, None) return
18 Wrzucanie kodu strukturalnego do funkcjonalnego from threading import RLock, Condition class Elem: def init (self, transaction, t, next): self.transaction = transaction self.t = t self.next = next _head = None _global_lock = Condition() _transaction_lock = RLock() def insert(head, transaction, t): elem = head while True: if elem.t <= t: temp = Elem(elem.transaction, elem.t, elem.next) elem.transaction = transaction elem.t = t elem.next = temp return else: if elem.next: elem = elem.next else: elem.next = Elem(transaction, t, None) return
19 Wrzucanie kodu strukturalnego do funkcjonalnego from threading import RLock, Condition class Elem: def init (self, transaction, t, next): self.transaction = transaction self.t = t self.next = next _head = None _global_lock = Condition() _transaction_lock = RLock() def insert(head, transaction, t): elem = head while True: if elem.t <= t: temp = Elem(elem.transaction, elem.t, elem.next) elem.transaction = transaction elem.t = t elem.next = temp return else: if elem.next: elem = elem.next else: elem.next = Elem(transaction, t, None) return def lock(transaction, length): _global_lock.acquire() if _head is None: acquired = _transaction_lock.acquire(blocking=false) if acquired and _head is None: _global_lock.release() return else: if _head == null: _head = Elem(T, t, null) else: insert(_head, T, t) while True: _global_lock.wait() if _head.t = T: _transaction_lock.acquire() if _head is not None: _head = _head.next _global_lock.release() return else: _global_lock.notify() def unlock(): _global_lock.acquire() _transaction_lock.release() _global_lock.notify() _global_lock.release() return
20 Rzeczy których nie lubie Szukanie Heisenbugów Wrzucanie kodu strukturalnego do funkcjonalnego Rozwiązywanie problemów synchronizacji
21 Rzeczy których nie lubie Szukanie Heisenbugów Wrzucanie kodu strukturalnego do funkcjonalnego Rozwiązywanie problemów synchronizacji
22 Rozwiązywanie problemów synchronizacji
23 Rozwiązywanie problemów synchronizacji
24 Rzeczy których nie lubie Szukanie Heisenbugów Wrzucanie kodu strukturalnego do funkcjonalnego Rozwiązywanie problemów synchronizacji
25 Rzeczy których nie lubie Szukanie Heisenbugów Wrzucanie kodu strukturalnego do funkcjonalnego Rozwiązywanie 2 problemów jednocześnie
26 Rozwiązania których szukam Szukanie Heisenbugów Wrzucanie kodu strukturalnego do funkcjonalnego Rozwiązywanie 2 problemów jednocześnie
27 Rozwiązania których szukam Szukanie Heisenbugów Wrzucanie kodu strukturalnego do funkcjonalnego Rozwiązywanie 2 problemów jednocześnie Uniwersalne
28 Rozwiązania którzych szukam Szukanie Heisenbugów Wrzucanie kodu strukturalnego do funkcjonalnego Proste w implementacji Rozwiązywanie 2 problemów jednocześnie Uniwersalne
29 Rozwiązania których szukam Szukanie Heisenbugów Bezbłędne Wrzucanie kodu strukturalnego do funkcjonalnego Proste w implementacji Rozwiązywanie 2 problemów jednocześnie Uniwersalne
30 Rozwiązania których szukam Szukanie Heisenbugów Bezbłędne Wrzucanie kodu strukturalnego do funkcjonalnego Proste w implementacji Rozwiązywanie 2 problemów jednocześnie Uniwersalne Wydajne
31 Rozwiązania
32 Globalny zamek from threading import Thread, Lock _global_lock = Lock() _shared_data = [0, 0, 0, 0] class GLThread (Thread): def init (self, data, index): Thread. init (self) self.index = index self.data = data def run(self): with _global_lock: self.data[self.index] += 1 my_data = self.data[self.index] print( set, self.index, to, my_data) for i in range(0, 10): GLThread(_shared_data, i % len(_shared_data)).start()
33 Globalny zamek from threading import Thread, Lock _global_lock = Lock() _shared_data = [0, 0, 0, 0] class GLThread (Thread): def init (self, data, index): Thread. init (self) self.index = index self.data = data def run(self): with _global_lock: self.data[self.index] += 1 my_data = self.data[self.index] print( set, self.index, to, my_data) for i in range(0, 10): GLThread(_shared_data, i % len(_shared_data)).start()
34 Globalny zamek Bezbolesna współbieżność
35 Globalny zamek Bezbolesna współbieżność
36 Globalny zamek Bezbolesna współbieżność
37 Wątki funkcyjne
38 Duplikaty
39 Duplikaty from hashlib import md5 hashes = [None] * len(files) def make_hash(i): source = open(files[i], rb ) data = source.read() source.close() hashes[i] = md5(data).digest() for i in range(0, len(files)): make_hash(i)
40 Duplikat from hashlib import md5 from _thread import start_new_thread # python2: thread hashes = [None] * len(files) def make_hash(i): source = open(files[i], rb ) data = source.read() source.close() hashes[i] = md5(data).digest() for i in range(0, len(files)): start_new_thread(function=make_hash, args=(i,))
41 Duplikat from hashlib import md5 from _thread import start_new_thread # python2: thread hashes = [None] * len(files) def make_hash(i): source = open(files[i], rb ) data = source.read() source.close() hashes[i] = md5(data).digest() for i in range(0, len(files)): start_new_thread(function=make_hash, args=(i,))
42 Global Interpreter Lock A global interpreter lock (GIL) is used internally to ensure that only one thread runs in the Python VM at a time. In general, Python offers to switch among threads only between bytecode instructions; how frequently it switches can be set via sys.setswitchinterval(). Each bytecode instruction and therefore all the C implementation code reached from each instruction is therefore atomic from the point of view of a Python program.
43 Duplikaty from hashlib import md5 #from _thread import start_new_thread # python2: thread from multiprocessing import Process hashes = [None] * len(files) def make_hash(i): source = open(files[i], rb ) data = source.read() source.close() hashes[i] = md5(data).digest() for i in range(0, len(files)): #start_new_thread(function=make_hash, args=(i,)) Process(target=make_hash, args=(i,)).start()
44 Duplikaty from hashlib import md5 from multiprocessing import Process hashes = [None] * len(files) def make_hash(i): source = open(files[i], rb ) data = source.read() source.close() hashes[i] = md5(data).digest() for i in range(0, len(files)): Process(target=make_hash, args=(i,)).start()
45 Duplikaty
46 Duplikaty
47 Duplikaty from hashlib import md5 from multiprocessing import Process hashes = [None] * len(files) def make_hash(i): source = open(files[i], rb ) data = source.read() source.close() hashes[i] = md5(data).digest() for i in range(0, len(files)): Process(target=make_hash, args=(i,)).start()
48 Duplikaty from hashlib import md5 from multiprocessing import Pool hashes = [None] * len(files) def make_hash(i): with semaphore: source = open(files[i], rb ) data = source.read() source.close() hashes[i] = md5(data).digest() pool = Pool(processes=4) # define after make_hash for i in range(0, len(files)): pool.apply_async(func=make_hash, args=(i,))
49 Duplikaty from hashlib import md5 from multiprocessing import Pool hashes = [None] * len(files) def make_hash(i): source = open(files[i], rb ) data = source.read() source.close() hashes[i] = md5(data).digest() pool = Pool(processes=4) # define after make_hash for i in range(0, len(files)): pool.apply_async(func=make_hash, args=(i,)) pool.close() # close before joining pool.join()
50 Wątki funkcyjne Preferują solipsyzm
51 Wątki funkcyjne Preferują solipsyzm tylko odczyt bez konfliktów
52 Wątki funkcyjne Preferują solipsyzm tylko odczyt bez konfliktów Niski koszt
53 Wątki funkcyjne Preferują solipsyzm tylko odczyt bez konfliktów Niski koszt ten sam schemat <10 lini kodu
54 Wątki funkcyjne Preferują solipsyzm tylko odczyt bez konfliktów Niski koszt ten sam schemat <10 lini kodu Znaczna poprawa efektywności
55 Wątki funkcyjne (Python) from hashlib import md5 from multiprocessing import Pool hashes = [None] * len(files) def make_hash(i): source = open(files[i], rb ) data = source.read() source.close() hashes[i] = md5(data).digest() pool = Pool(processes=4) # define after make_hash for i in range(0, len(files)): pool.apply_async(func=make_hash, args=(i,)) pool.close() # close before joining pool.join()
56 Wątki funkcyjne (Python) map from hashlib import md5 from multiprocessing import Pool hashes = [None] * len(files) def make_hash(i): source = open(files[i], rb ) data = source.read() source.close() hashes[i] = md5(data).digest() pool = Pool(processes=4) # define after make_hash pool.map(func=make_hash, iterable=range(0, len(files)))
57 Pamięć transakcyjna
58 Pamięć transakcyjna
59 Pamięć transakcyjna
60 Pamięć transakcyjna
61 Pamięć transakcyjna
62 Pamięć transakcyjna
63 Pamięć transakcyjna
64 Pamięć transakcyjna
65 Pamięć transakcyjna
66 Pamięć transakcyjna
67 Pamięć transakcyjna Python: Kamaelia/Axon ( Durus ( Java Deuce STM ( C SXM (research.microsoft.com) C/C++ wbudowana w GCC (gcc.gnu.org/wiki/transactionalmemory)
68 Bank
69 Bank ACCOUNTS = 10 TRANSFERS = 10 ids = ["id_" + str(i) for i in range(0, ACCOUNTS)] accounts = {}
70 Bank ACCOUNTS = 10 TRANSFERS = 10 ids = ["id_" + str(i) for i in range(0, ACCOUNTS)] accounts = {} def init(ids, sum): for i in ids: accounts[i] = sum def total(ids): total = 0 for i in ids: total += accounts[i] return total def transfer(a, b, sum): accounts[a] -= sum accounts[b] += sum
71 Bank from random import choice, randint ACCOUNTS = 10 TRANSFERS = 10 ids = ["id_" + str(i) for i in range(0, ACCOUNTS)] accounts = {} def init(ids, sum): for i in ids: accounts[i] = sum init(ids, 1000) for i in range(0, TRANSFERS): a = choice(ids) b = choice(filter(lambda x: x!= a, ids)) sum = randint(1, 5) * 100 transfer(a, b, sum) print total(ids) def total(ids): total = 0 for i in ids: total += accounts[i] return total def transfer(a, b, sum): accounts[a] -= sum accounts[b] += sum
72 Bank from random import choice, randint ACCOUNTS = 10 TRANSFERS = 10 ids = ["id_" + str(i) for i in range(0, ACCOUNTS)] accounts = {} def init(ids, sum): # transaction start for i in ids: accounts[i] = sum # transaction end init(ids, 1000) for i in range(0, TRANSFERS): a = choice(ids) b = choice(filter(lambda x: x!= a, ids)) sum = randint(1, 5) * 100 # fork process transfer(a, b, sum) # join processes print total(ids) def total(ids): # transaction start total = 0 for i in ids: total += accounts[i] # transaction end return total def transfer(a, b, sum): # transaction start accounts[a] -= sum accounts[b] += sum # transaction end
73 Bank from random import choice, randint from multiprocessing import Pool ACCOUNTS = 10 TRANSFERS = 10 ids = ["id_" + str(i) for i in range(0, ACCOUNTS)] accounts = {} def init(ids, sum): # transaction start for i in ids: accounts[i] = sum # transaction end init(ids, 1000) for i in range(0, TRANSFERS): a = choice(ids) b = choice(filter(lambda x: x!= a, ids)) sum = randint(1, 5) * 100 pool.apply_async(func=transfer, args=(a,b,sum)) pool.close() pool.join() print total(ids) def total(ids): # transaction start total = 0 for i in ids: total += accounts[i] # transaction end return total def transfer(a, b, sum): # transaction start accounts[a] -= sum accounts[b] += sum # transaction end
74 Bank from random import choice, randint from multiprocessing import Pool from durus.connection import Connection from durus.client_storage import ClientStorage ACCOUNTS = 10 TRANSFERS = 10 ids = ["id_" + str(i) for i in range(0, ACCOUNTS)] accounts = {} def init(ids, sum): # transaction start for i in ids: accounts[i] = sum # transaction end init(ids, 1000) for i in range(0, TRANSFERS): a = choice(ids) b = choice(filter(lambda x: x!= a, ids)) sum = randint(1, 5) * 100 pool.apply_async(func=transfer, args=(a,b,sum)) pool.close() pool.join() print total(ids) def total(ids): # transaction start total = 0 for i in ids: total += accounts[i] # transaction end return total def transfer(a, b, sum): # transaction start accounts[a] -= sum accounts[b] += sum # transaction end
75 Bank from random import choice, randint from multiprocessing import Pool from durus.connection import Connection from durus.client_storage import ClientStorage ACCOUNTS = 10 TRANSFERS = 10 ids = ["id_" + str(i) for i in range(0, ACCOUNTS)] accounts = {} def init(ids, sum): transaction = Connection(ClientStorage()) accounts = transaction.get_root() for i in ids: accounts[i] = sum transaction.commit() def total(ids): transaction = Connection(ClientStorage()) accounts = transaction.get_root() total = 0 for i in ids: total += accounts[i] transaction.commit() def transfer(a, b, sum): transaction = Connection(ClientStorage()) accounts = transaction.get_root() accounts[a] -= sum accounts[b] += sum transaction.commit() init(ids, 1000) for i in range(0, TRANSFERS): a = choice(ids) b = choice(filter(lambda x: x!= a, ids)) sum = randint(1, 5) * 100 pool.apply_async(func=transfer, args=(a,b,sum)) pool.close() pool.join() print total(ids) return total
76 Bank from random import choice, randint from multiprocessing import Pool from durus.connection import Connection from durus.client_storage import ClientStorage, ConflictError ACCOUNTS = 10 TRANSFERS = 10 ids = ["id_" + str(i) for i in range(0, ACCOUNTS)] accounts = {} def init(ids, sum): transaction = Connection(ClientStorage()) accounts = transaction.get_root() for i in ids: accounts[i] = sum transaction.commit() def total(ids): transaction = Connection(ClientStorage()) accounts = transaction.get_root() total = 0 for i in ids: total += accounts[i] transaction.commit() return total def transfer(a, b, sum): transaction = Connection(ClientStorage()) accounts = transaction.get_root() try: accounts[a] -= sum accounts[b] += sum transaction.commit() except ConflictError: transaction.abort() init(ids, 1000) for i in range(0, TRANSFERS): a = choice(ids) b = choice(filter(lambda x: x!= a, ids)) sum = randint(1, 5) * 100 pool.apply_async(func=transfer, args=(a,b,sum)) pool.close() pool.join() print total(ids)
77 Bank from random import choice, randint from multiprocessing import Pool from durus.connection import Connection from durus.client_storage import ClientStorage, ConflictError ACCOUNTS = 10 TRANSFERS = 10 ids = ["id_" + str(i) for i in range(0, ACCOUNTS)] accounts = {} def init(ids, sum): transaction = Connection(ClientStorage()) accounts = transaction.get_root() for i in ids: accounts[i] = sum transaction.commit() def total(ids): transaction = Connection(ClientStorage()) accounts = transaction.get_root() total = 0 for i in ids: total += accounts[i] transaction.commit() return total def transfer(a, b, sum): transaction = Connection(ClientStorage()) accounts = transaction.get_root() while True: try: accounts[a] -= sum accounts[b] += sum transaction.commit() return except ConflictError: transaction.abort() init(ids, 1000) for i in range(0, TRANSFERS): a = choice(ids) b = choice(filter(lambda x: x!= a, ids)) sum = randint(1, 5) * 100 pool.apply_async(func=transfer, args=(a,b,sum)) pool.close() pool.join() print total(ids)
78
79 Bank class Transaction (Process): def init (self, f, args, kwargs={}): Process. init (self) self._f, self._a, self._kw = f, args, kwargs self.ppipe, self.pipe = Pipe() self._returned, self._result = False, None def run(self): transaction = Connection(ClientStorage()) while True: try: memory = transaction.get_root() result = self._f(memory, *self._a, **self._kw) transaction.commit() self.pipe.send(result) self.pipe.close() break except ConflictError: transaction.abort() def result(self): if not self._returned: self._result = self.ppipe.recv() self._returned = True return self._result
80 Bank class Transaction (Process): def init (self, f, args, kwargs={}): Process. init (self) self._f, self._a, self._kw = f, args, kwargs self.ppipe, self.pipe = Pipe() self._returned, self._result = False, None def run(self): transaction = Connection(ClientStorage()) while True: try: memory = transaction.get_root() result = self._f(memory, *self._a, **self._kw) transaction.commit() self.pipe.send(result) self.pipe.close() break except ConflictError: transaction.abort() def result(self): if not self._returned: self._result = self.ppipe.recv() self._returned = True return self._result # pool = Pool(processes=4) # pool = Pool(processes=4, initializer=transaction) t = Transaction(init, (ids, 1000)) t.start() t.join() ts = [] for i in range(0, TRANSFERS): #... t = Transaction(transfer, (a,b,sum)) # pool.apply_async(func=t.start) t.start() ts.append(t) for t in ts: t.join() t = Transaction(total, (ids,)) t.start() t.join() print t.result()
81 Bank class Transaction (Process): def init (self, f, args, kwargs={}): Process. init (self) self._f, self._a, self._kw = f, args, kwargs self.ppipe, self.pipe = Pipe() self._returned, self._result = False, None def run(self): transaction = Connection(ClientStorage()) while True: try: memory = transaction.get_root() result = self._f(memory, *self._a, **self._kw) transaction.commit() self.pipe.send(result) self.pipe.close() break except ConflictError: transaction.abort() def result(self): if not self._returned: self._result = self.ppipe.recv() self._returned = True return self._result # pool = Pool(processes=4) # pool = Pool(processes=4, initializer=transaction) t = Transaction(init, (ids, 1000)) t.start() t.join() ts = [] for i in range(0, TRANSFERS): #... t = Transaction(transfer, (a,b,sum)) # pool.apply_async(func=t.start) t.start() ts.append(t) for t in ts: t.join() t = Transaction(total, (ids,)) t.start() t.join() print t.result()
82 Bank def transaction(f, a, kw={}): transaction = Connection(ClientStorage()) while True: try: memory = transaction.get_root() result = f(memory, *a, **kw) transaction.commit() return result except ConflictError: transaction.abort()
83 Bank from random import choice, randint from multiprocessing import Pool from durus.connection import Connection from durus.client_storage import ClientStorage, ConflictError ACCOUNTS = 10 TRANSFERS = 10 def total(ids): def _total(accounts, ids): total = 0 for i in ids: total += accounts[i] return total return transaction(_total, (ids,)) ids = ["id_" + str(i) for i in range(0, ACCOUNTS)] accounts = {} def transaction(f, a, kw={}): transaction = Connection(ClientStorage()) while True: try: memory = transaction.get_root() result = f(memory, *a, **kw) transaction.commit() return result except ConflictError: transaction.abort() def init(ids, sum): def _init(accounts, ids, sum): for i in ids: accounts[i] = sum return transaction(_init, (ids, sum,)) def transfer(a, b, sum): def _transfer(accounts, a, b, sum): accounts[a] -= sum accounts[b] += sum return transaction(_transfer, (a, b, sum)) init(ids, 1000) for i in range(0, TRANSFERS): a = choice(ids) b = choice(filter(lambda x: x!= a, ids)) sum = randint(1, 5) * 100 pool.apply_async(func=transfer, args=(a,b,sum)) pool.close() pool.join() print total(ids)
84 Pamięć transakcyjna Optymistyczna
85 Pamięć transakcyjna Optymistyczna czynności są powtarzane jeśli są konflikty czuła na liczbę transakcji i zasobow extra kod
86 Pamięć transakcyjna Optymistyczna czynności są powtarzane jeśli są konflikty czuła na liczbę transakcji i zasobow extra kod Uniwersalność
87 Pamięć transakcyjna Optymistyczna czynności są powtarzane jeśli są konflikty czuła na liczbę transakcji i zasobow extra kod Uniwersalność ten sam schemat rozwiązuje większość problemów
88 Pamięć transakcyjna Optymistyczna czynności są powtarzane jeśli są konflikty czuła na liczbę transakcji i zasobow extra kod Uniwersalność ten sam schemat rozwiązuje większość problemów Poprawa efektywności
89 Pamięć transakcyjna Optymistyczna czynności są powtarzane jeśli są konflikty czuła na liczbę transakcji i zasobow extra kod Uniwersalność ten sam schemat rozwiązuje większość problemów Poprawa efektywności (jeśli nie ma dużo konfliktów)
90 Pamięć transakcyjna Optymistyczna czynności są powtarzane jeśli są konflikty czuła na liczbę transakcji i zasobow extra kod Uniwersalność ten sam schemat rozwiązuje większość problemów Poprawa efektywności (jeśli nie ma dużo konfliktów) Akcje muszą dać się powtarzać (i nie mogą mieć nieodwracalnych efektów)
91 Bank // Deuce STM // compile with -javaagent:bin/deuceagent.jar public class Bank { public static final int TRANSFERS = 10; public static final int ACCOUNTS = 100; } private final double[] accounts = new double[accounts]; public Bank() { for (int i = 0; i < accounts.length; i++) { accounts[i] = 200; } public void total() { double total = 0d; for (int i = 0; i < accounts.length; i++) { total += accounts[i]; } public void transfer(int a, int b, double sum) { accounts[a] -= sum; accounts[b] += sum; } public static void main(string[] args) { final Random random = new Random(); final Bank bank = new Bank(); List<Thread> transactions = new LinkedList<Thread>(); } for (int i = 0; i < Bank.TRANSFERS; i++) { final int a = random.nextint(bank.accounts); final int b = random.nextint(bank.accounts); final double sum = 5d + random.nextdouble() % 15d; Thread t = new Thread() { public void run() { bank.transfer(a, b, sum); } }; t.start(); transactions.add(t); } Thread t = new Thread() { public void run() { bank.total(); } }; t.start(); transactions.add(t); for (Thread thread : transactions) { thread.join(); }
92 Bank from random import choice, randint from multiprocessing import Pool from durus.connection import Connection from durus.client_storage import ClientStorage, ConflictError ACCOUNTS = 10 TRANSFERS = 10 def total(ids): def _total(accounts, ids): total = 0 for i in ids: total += accounts[i] return total return transaction(_total, (ids,)) ids = ["id_" + str(i) for i in range(0, ACCOUNTS)] accounts = {} def transaction(f, a, kw={}): transaction = Connection(ClientStorage()) while True: try: memory = transaction.get_root() result = f(memory, *a, **kw) transaction.commit() return result except ConflictError: transaction.abort() def init(ids, sum): def _init(accounts, ids, sum): for i in ids: accounts[i] = sum return transaction(_init, (ids, sum,)) def transfer(a, b, sum): def _transfer(accounts, a, b, sum): accounts[a] -= sum accounts[b] += sum return transaction(_transfer, (a, b, sum)) init(ids, 1000) for i in range(0, TRANSFERS): a = choice(ids) b = choice(filter(lambda x: x!= a, ids)) sum = randint(1, 5) * 100 pool.apply_async(func=transfer, args=(a,b,sum)) pool.close() pool.join() print total(ids)
93 Bank from random import choice, randint from multiprocessing import Pool from durus.connection import Connection from durus.client_storage import ClientStorage, ConflictError ACCOUNTS = 10 TRANSFERS = 10 def total(ids): def _total(accounts, ids): total = 0 for i in ids: total += accounts[i] return total return transaction(_total, (ids,)) ids = ["id_" + str(i) for i in range(0, ACCOUNTS)] accounts = {} def transaction(f, a, kw={}): transaction = Connection(ClientStorage()) while True: try: memory = transaction.get_root() result = f(memory, *a, **kw) transaction.commit() return result except ConflictError: transaction.abort() def init(ids, sum): def _init(accounts, ids, sum): for i in ids: accounts[i] = sum return transaction(_init, (ids, sum,)) def transfer(a, b, sum): def _transfer(accounts, a, b, sum): ask_user_for_authentication(a, b, sum) if _: accounts[a] -= sum accounts[b] += sum return transaction(_transfer, (a, b, sum)) init(ids, 1000) for i in range(0, TRANSFERS): a = choice(ids) b = choice(filter(lambda x: x!= a, ids)) sum = randint(1, 5) * 100 pool.apply_async(func=transfer, args=(a,b,sum)) pool.close() pool.join() print total(ids)
94 Globalny zamek!
95 Globalny zamek!
96 Posortowane zamki Pesymistyczne transakcje
97 Ale zamki są trudne?
98 Tak Ale zamki są trudne?
99 Ale zamki są trudne? Tak... ale dlaczego?
100 Ale zamki są trudne? Tak... ale dlaczego? Deadlock
101 Ale zamki są trudne? Tak... ale dlaczego? Deadlock Pamiętanie który zamek jest do czego i kompozycyjność
102 Ale zamki są trudne? Tak... ale dlaczego? Deadlock Pamiętanie który zamek jest do czego i kompozycyjność Dodatkowy kod
103 Ale zamki są trudne? Tak... ale dlaczego? Deadlock Pamiętanie który zamek jest do czego i kompozycyjność Dodatkowy kod zamknąć zamki w transakcje
104 Ale zamki są trudne? Tak... ale dlaczego? Deadlock Pamiętanie który zamek jest do czego i kompozycyjność po jednym zamku na obiekt współdzielony Dodatkowy kod zamknąć zamki w transakcje
105 Ale zamki są trudne? Tak... ale dlaczego? Deadlock sortowanie zamków, 2PL Pamiętanie który zamek jest do czego i kompozycyjność po jednym zamku na obiekt współdzielony Dodatkowy kod zamknąć zamki w transakcje
106 Posortowane zamki
107 Posortowane zamki
108 Posortowane zamki
109 Posortowane zamki
110 Posortowane zamki
111 Posortowane zamki
112 Posortowane zamki from multiprocessing import Lock accounts, locks = {}, {} for i in range(0, ACCOUNTS): accounts[i] = 200 locks[i] = Lock() def transfer(a, b, sum): _locks = [locks[a], locks[b]] _locks.sort(key = lambda x: str(x)) for lock in _locks: lock.acquire() accounts[a] -= sum locks[a].release() accounts[b] += sum locks[b].release()
113 Kiedy czego używać? Wątki funcyjne
114 Kiedy czego używać? Wątki funcyjne niezależne zadania
115 Kiedy czego używać? Wątki funcyjne niezależne zadania Transakcje
116 Kiedy czego używać? Wątki funcyjne niezależne zadania Transakcje wszystko co można powtarzać, bez bardzo dużej konkurencji o zasoby
117 Kiedy czego używać? Wątki funcyjne niezależne zadania Transakcje wszystko co można powtarzać, bez bardzo dużej konkurencji o zasoby Posortowane zamki
118 Kiedy czego używać? Wątki funcyjne niezależne zadania Transakcje wszystko co można powtarzać, bez bardzo dużej konkurencji o zasoby Posortowane zamki wszystko czego nie można powtarzać
119 Kiedy czego używać? Wątki funcyjne niezależne zadania Transakcje wszystko co można powtarzać, bez bardzo dużej konkurencji o zasoby Posortowane zamki wszystko czego nie można powtarzać Globalny zamek
120 Kiedy czego używać? Wątki funcyjne niezależne zadania Transakcje wszystko co można powtarzać, bez bardzo dużej konkurencji o zasoby Posortowane zamki wszystko czego nie można powtarzać Globalny zamek najlepiej nigdy
121 Kiedy czego używać? Wątki funcyjne niezależne zadania Transakcje wszystko co można powtarzać, bez bardzo dużej konkurencji o zasoby Posortowane zamki wszystko czego nie można powtarzać Globalny zamek najlepiej nigdy
122 Koło Naukowe SKiSR Koło Naukowe SKiSR
123 Koło Naukowe SKiSR Koło Naukowe SKiSR
Zaawansowany kurs języka Python
Wykład 6. 6 listopada 2015 Plan wykładu Callable objects 1 Callable objects 2 3 Plan wykładu Callable objects 1 Callable objects 2 3 Callable objects Wszystko jest obiektem. Callable objects Wszystko jest
Bardziej szczegółowoWątki i komunikacja między nimi w języku Python
Wątki i komunikacja między nimi w języku Python Czyli kolejny poziom abstrakcji. Michał Mazurek mazurek.michal@gmail.com http://www.ifresearch.pl January 14, 2008 Python? A co to? Python Interpretowany,
Bardziej szczegółowoWspółbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1
Współbieżność i równoległość w środowiskach obiektowych Krzysztof Banaś Obliczenia równoległe 1 Java Model współbieżności Javy opiera się na realizacji szeregu omawianych dotychczas elementów: zarządzanie
Bardziej szczegółowoKurs rozszerzony języka Python
Wykład 6. 10 listopada 2017 Plan wykładu 1 2 3 Plan wykładu 1 2 3 Wszystko jest obiektem. Wszystko jest obiektem. A funkcje? Przykład def foo(x): return 2*x dir(foo) Przykład def foo(x): return 2*x dir(foo)
Bardziej szczegółowoJava. Wykład. Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ
Procesy i wątki Proces posiada samodzielne środowisko wykonawcze. Proces posiada własny zestaw podstawowych zasobów w czasie wykonywania; W szczególności, każdy proces ma własną przestrzeń pamięci. W uproszczeniu
Bardziej szczegółowoProgramowanie w Sieci Internet. Python: Wątki. Kraków, 12 grudnia 2014 r. mgr Piotr Rytko Wydział Matematyki i Informatyki
Programowanie w Sieci Internet Python: Wątki Kraków, 12 grudnia 2014 r. mgr Piotr Rytko Wydział Matematyki i Informatyki Wątki akt pierwszy, kilka przydatnych funkcji Lib/threading.py modół pozwalający
Bardziej szczegółowoWątki. Definiowanie wątków jako klas potomnych Thread. Nadpisanie metody run().
Wątki Streszczenie Celem wykładu jest wprowadzenie do obsługi wątków w Javie. Czas wykładu 45 minut. Definiowanie wątków jako klas potomnych Thread Nadpisanie metody run(). class Watek extends Thread public
Bardziej szczegółowoJava. Programowanie Obiektowe Mateusz Cicheński
Java Programowanie Obiektowe Mateusz Cicheński Wielowątkowość Proces a wątek? Thread vs Runnable sleep(), interrupt(), join() Problemy wielowątkowości Obiekty niemodyfikowalne (immutable) Serializacja
Bardziej szczegółowoProgramowanie obiektowe
Programowanie obiektowe Wykład 2: Wstęp do języka Java 3/4/2013 S.Deniziak: Programowanie obiektowe - Java 1 Cechy języka Java Wszystko jest obiektem Nie ma zmiennych globalnych Nie ma funkcji globalnych
Bardziej szczegółowoKurs języka Python. Wątki
Kurs języka Python Wątki Wątek Wątek (ang. thread) to jednostka wykonawcza w obrębie jednego procesu, będąca kolejnym ciągiem instrukcji wykonywanym w obrębie tych samych danych (w tej samej przestrzeni
Bardziej szczegółowoWSPÓŁBIEŻNOŚĆ. MATERIAŁY:
WSPÓŁBIEŻNOŚĆ ZAGADNIENIA: procesy, wątki, synchronizacja, synchronizacja w Java 5.0 blokady, egzekutory, zbiory wątków MATERIAŁY: http://docs.oracle.com/javase/tutorial/essential/concurrency/ HTTP://USERS.UJ.EDU.PL/~CIESLA/
Bardziej szczegółowoPlan. krótkie opisy modułów. 1 Uwagi na temat wydajności CPython a. 2 Podstawowe techniki poprawiające wydajność obliczeniową
Plan 1 Uwagi na temat wydajności CPython a 2 Podstawowe techniki poprawiające wydajność obliczeniową 3 Podstawowe techniki poprawiające zużycie pamięci krótkie opisy modułów 1 array - jak oszczędzić na
Bardziej szczegółowoJęzyki i Techniki Programowania II. Wykład 7. Współbieżność 1
Języki i Techniki Programowania II Wykład 7 Współbieżność 1 Programy, Procesy, Wątki Program to zestaw instrukcji do wykonania, dane do przetworzenia, mechanizmy sterujące (stos) Proces w komputerze to
Bardziej szczegółowoWykład 2 Wybrane konstrukcje obiektowych języków programowania (1)
MAS dr. Inż. Mariusz Trzaska Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1) Zagadnienia o Podstawy o Kontrolowanie sterowania o Klasy o Interfejsy o Obsługa błędów o Pojemniki o System
Bardziej szczegółowoInstallation of EuroCert software for qualified electronic signature
Installation of EuroCert software for qualified electronic signature for Microsoft Windows systems Warsaw 28.08.2019 Content 1. Downloading and running the software for the e-signature... 3 a) Installer
Bardziej szczegółowoWspółbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1
Współbieżność i równoległość w środowiskach obiektowych Krzysztof Banaś Obliczenia równoległe 1 Java Model współbieżności Javy opiera się na realizacji szeregu omawianych dotychczas elementów: zarządzanie
Bardziej szczegółowoMetody Metody, parametry, zwracanie wartości
Materiał pomocniczy do kursu Podstawy programowania Autor: Grzegorz Góralski ggoralski.com Metody Metody, parametry, zwracanie wartości Metody - co to jest i po co? Metoda to wydzielona część klasy, mająca
Bardziej szczegółowoZaawansowany kurs języka Python
Wykład 4. 23 października 2015 Plan wykładu 1 2 Pliki tekstowe Trwałość obiektów CSV Strumienie Plan wykładu 1 2 Pliki tekstowe Trwałość obiektów CSV Strumienie Protokół iteracyjny Producent Umiem dostarczać
Bardziej szczegółowoWykład 12. Programowanie serwera MS SQL 2005 w C#
Wykład 12 Programowanie serwera MS SQL 2005 w C# Budowa procedur składowanych w C# Budowa funkcji składowanych w C# Wykorzystanie funkcji składowanych w C# po stronie klienta Tworzenie typów definiowanych
Bardziej szczegółowoProgramowanie komputerów
Programowanie komputerów Wykład 7: Programowanie wielowątkowe w Javie dr inż. Walery Susłow Współbieżność Programy współbieżne (concurrent software) aplikacje potrafiące wykonywać kilka operacji w tym
Bardziej szczegółowoProgramowanie współbieżne Laboratorium nr 11
Programowanie współbieżne Laboratorium nr 11 Wykonywane w danym momencie programy nazwano procesami [1] - izolowanymi, niezależnie wykonywanymi programami, dla których system operacyjny przydzielał pamięć,
Bardziej szczegółowoZaawansowane aplikacje WWW - laboratorium
Zaawansowane aplikacje WWW - laboratorium Przetwarzanie XML (część 2) Celem ćwiczenia jest przygotowanie aplikacji, która umożliwi odczyt i przetwarzanie pliku z zawartością XML. Aplikacja, napisana w
Bardziej szczegółowoProgramowanie współbieżne Zadanie 5 - Podstawowe problemy programowania współbieżnego
150875 Grzegorz Graczyk numer indeksu imię i nazwisko 151021 Paweł Tarasiuk numer indeksu imię i nazwisko Data 2011-11-07 Kierunek Informatyka Specjalizacja Inżynieria Oprgoramowania i Analiza Danych Rok
Bardziej szczegółowoTechnologie cyfrowe semestr letni 2018/2019
Technologie cyfrowe semestr letni 2018/2019 Tomasz Kazimierczuk Wykład 8 (15.04.2019) Kompilacja Kompilacja programu (kodu): proces tłumaczenia kodu napisanego w wybranym języku na kod maszynowy, zrozumiały
Bardziej szczegółowoKurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016
Wykład 9 28 kwiecień 2016 Java Collections Framework (w C++ Standard Template Library) Kolekcja (kontener) Obiekt grupujacy/przechowuj acy jakieś elementy (obiekty lub wartości). Przykładami kolekcji sa
Bardziej szczegółowoProgramowanie funkcyjne w Pythonie
Programowanie funkcyjne w Pythonie Koªo DSG 2013 Konrad Siek konrad.siek@cs.put.edu.pl dsg.cs.put.poznan.pl Paradygmat funkcyjny Paradygmat = sposób my±lenia o problemach Paradygmat funkcyjny Paradygmat
Bardziej szczegółowoWstęp. Przetwarzanie współbieżne, równoległe i rozproszone
Wstęp. 1 Cel zajęć Zapoznanie z technikami i narzędziami programistycznymi służącymi do tworzenia programów równoległych Przedstawienie sprzętu wykorzystywanego do obliczeń równoległych Nauczenie sposobów
Bardziej szczegółowoPrzegląd języka Python. Łukasz Anwajler
Przegląd języka Python Łukasz Anwajler lukasz.anwajler@pjwstk.edu.pl Nie wierzcie mi na słowo Zaraz zobaczymy: czym jest Python dlaczego warto go używać jakie ma zastosowania gdzie z niego korzystają jakzacząć
Bardziej szczegółowoWspółbieżność w środowisku Java
Współbieżność w środowisku Java Wątki i ich synchronizacja Zagadnienia Tworzenie wątków Stany wątków i ich zmiana Demony Synchronizacja wątków wzajemne wykluczanie oczekiwanie na zmiennych warunkowych
Bardziej szczegółowoOperatory. Składnia. Typy proste. Znaki specjalne
Składnia Operatory komentarze // /* */ /** */ litery A.. Z, a.. z, \udddd dddd>00c0 identyfikatory pierwszy znak= _, lub litera, następne dodatkowo 0.. 9 liczby dziesiętne Ddddd (D 0) liczby ósemkowe 0dddd
Bardziej szczegółowoPętle while, for, do while, instrukcje break, continue, switch 1. Pętle
Pętle while, for, while, instrukcje break, continue, switch 1. Pętle Przykład 1 - Pętla while public class lab4_3 public static void main(string[] args) char ch = 'a'; String s, wynik=""; while ( ch!=
Bardziej szczegółowoSerwer współbieżny połączeniowy
Serwery współbieżne 1. Serwery współbieżne serwery połączeniowe, usuwanie zakończonych procesów, serwery bezpołączeniowe, 2. Jednoprocesowe serwery współbieżne. koncepcja i implementacja. 1 Serwer współbieżny
Bardziej szczegółowoProgramowanie w języku Java. Bazy danych SQLite w Javie
Programowanie w języku Java Bazy danych SQLite w Javie Co to jest SQLite SQLite to bezserwerowa, nie wymagająca konfiguracji relacyjna baza danych. Znajduje szerokie zastosowanie np.. w systemie android
Bardziej szczegółowoWzorce logiki dziedziny
Wzorce logiki dziedziny 1. Wzorce logiki dziedziny skrypt transakcji (Transaction Script), brama tabeli (Table Data Gateway), model dziedziny (Domain model), strategia (Strategy), moduł tabeli (Table Module),
Bardziej szczegółowoObliczenia równoległe i rozproszone w JAVIE. Michał Kozłowski 30 listopada 2003
Obliczenia równoległe i rozproszone w JAVIE Michał Kozłowski 30 listopada 2003 Wątki w JAVIE Reprezentacja wątków jako obiektów Uruchamianie i zatrzymywanie wątków Realizacja wątków Ograniczenia Mechanizmy
Bardziej szczegółowoWIELOWĄTKOWOŚĆ. Waldemar Korłub. Platformy Technologiczne KASK ETI Politechnika Gdańska
WIELOWĄTKOWOŚĆ Waldemar Korłub Platformy Technologiczne KASK ETI Politechnika Gdańska Wydajność 2 Do 2005 roku wydajność komputerów poprawiano zwiększając częstotliwość taktowania procesora 1995: Pentium
Bardziej szczegółowoModelowanie numeryczne w fizyce atmosfery Ćwiczenia 3
Modelowanie numeryczne w fizyce atmosfery Sylwester Arabas (ćwiczenia do wykładu dr. hab. inż. Lecha Łobockiego) Instytut Geofizyki, Wydział Fizyki Uniwersytetu Warszawskiego 3. listopada 2011 r. Schemat
Bardziej szczegółowoJava Programowanie Obiektowe Ćwiczenie 1- wprowadzenie
Java Programowanie Obiektowe Ćwiczenie 1- wprowadzenie 1. Cel ćwiczenia i zakres Poznanie środowiska IntelliJ IDEA Maven narzędzie do budowanie projektów typy podstawowe i tablice, instrukcje warunkowe,
Bardziej szczegółowoJęzyki Programowania II Wykład 3. Java podstawy. Przypomnienie
Języki Programowania II Wykład 3 Java podstawy Przypomnienie Analiza, projektowanie, programowanie, testowanie, wdrażanie Iteracyjnie nie kaskadowo Przypadki użycia = opowiastki o używaniu systemu = wymagania
Bardziej szczegółowoZofia Kruczkiewicz, Programowanie obiektowe - java, wykład 2 1
PODSTAWOWE ELEMENTY JĘZYKA JAVA WYRAŻENIA, OPERATORY, INSTRUKCJE 1. Operatory arytmetyczne +, -, /,*, % Przykład 1 programu z interfejsem konsolowym public class Lab2_1 // Tworzy generator liczb losowych,
Bardziej szczegółowoSignals + Threads: Qt vs. Boost
Signals + Threads: Qt vs. Boost Adam Bujalski 2014-04-01 Adam Bujalski Signals + Threads: Qt vs. Boost 2014-04-01 1 / 22 Spis Treści 1 2 Wątki 3 Qt::QueuedConnection w boost Adam Bujalski Signals + Threads:
Bardziej szczegółowoKurs programowania. Wykład 9. Wojciech Macyna
Wykład 9 Java Collections Framework (w C++ Standard Template Library) Kolekcja (kontener) Obiekt grupujacy/przechowuj acy jakieś elementy (obiekty lub wartości). Przykładami kolekcji sa zbiór, lista czy
Bardziej szczegółowoJava: interfejsy i klasy wewnętrzne
Java: interfejsy i klasy wewnętrzne Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak 1 INTERFEJSY Interfejs to opis co klasa implementująca dany interfejs powinna robić, ale bez określania
Bardziej szczegółowoProgramowanie obiektowe
Przygotował: Jacek Sroka 1 Programowanie obiektowe Wykład 3 Java podstawy Przygotował: Jacek Sroka 2 Przypomnienie Analiza, projektowanie, programowanie, testowanie, wdrażanie Iteracyjnie nie kaskadowo
Bardziej szczegółowoSystemy Rozproszone - Ćwiczenie 6
Systemy Rozproszone - Ćwiczenie 6 1 Obiekty zdalne Celem ćwiczenia jest stworzenie obiektu zdalnego świadczącego prostą usługę nazewniczą. Nazwy i odpowiadające im punkty końcowe będą przechowywane przez
Bardziej szczegółowoProgramowanie obiektowe
Programowanie obiektowe Język programowania Ruby Marcin Młotkowski 12 kwietnia 2018 Plan wykładu 1 Wstęp 2 Typy numeryczne Łańcuchy znaków (klasa String) Przedziały Tablice i tablice asocjacyjne Nazwy
Bardziej szczegółowoAplikacja wielowątkowa prosty komunikator
Aplikacja wielowątkowa prosty komunikator Klient 0 (host 1) Wątek 0 Komponent serwera Wątek pochodny 3.1 Klient 1 (host 2) Wątek 1 Komponent serwera Wątek pochodny 3.2 Host 4 Serwer Wątek 3 Klient 2 (host
Bardziej szczegółowoPodstawy współbieżności
Podstawy współbieżności Algorytmy i struktury danych. Wykład 6. Rok akademicki: 2010/2011 Od koncepcji współbieżności do systemów rozproszonych Współbieżnośd rozważany na poziomie koncepcyjnym sposób realizacji
Bardziej szczegółowoPodstawy Programowania ELEMENTY PROGRAMU i TYPY DANYCH
Podstawy Programowania ELEMENTY PROGRAMU i TYPY DANYCH Michał Bujacz bujaczm@p.lodz.pl B9 Lodex 207 godziny przyjęć: środy i czwartki 10:00-11:00 http://www.eletel.p.lodz.pl/bujacz/ 1 Pytania weryfikacyjne:
Bardziej szczegółowoAplikacje w Javie- wykład 11 Wątki-podstawy
1 Aplikacje w Javie- wykład 11 Wątki-podstawy Treści prezentowane w wykładzie zostały oparte o: Barteczko, JAVA Programowanie praktyczne od podstaw, PWN, 2014 http://docs.oracle.com/javase/8/docs/ http://docs.oracle.com/javase/9/docs/
Bardziej szczegółowoProjektowanie algorytmów rekurencyjnych
C9 Projektowanie algorytmów rekurencyjnych wiczenie 1. Przeanalizowa działanie poniszego algorytmu dla parametru wejciowego n = 4 (rysunek 9.1): n i i
Bardziej szczegółowoProgramowanie obiektowe i zdarzeniowe
Marek Tabędzki Programowanie obiektowe i zdarzeniowe 1/23 Programowanie obiektowe i zdarzeniowe wykład 6 polimorfizm Na poprzednim wykładzie: dziedziczenie jest sposobem na utworzenie nowej klasy na podstawie
Bardziej szczegółowoJęzyk JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna
Język JAVA podstawy Wykład 3, część 3 1 Język JAVA podstawy Plan wykładu: 1. Konstrukcja kodu programów w Javie 2. Identyfikatory, zmienne 3. Typy danych 4. Operatory, instrukcje sterujące instrukcja warunkowe,
Bardziej szczegółowoModel pamięci. Rafał Skinderowicz
Model pamięci Rafał Skinderowicz Czym jest model pamięci Model pamięci dotyczy programów współbieżnych W programie współbieżnym może się zdarzyć, że dany wątek nie będzie widział od razu wartości zmiennej
Bardziej szczegółowoMachine Learning for Data Science (CS4786) Lecture11. Random Projections & Canonical Correlation Analysis
Machine Learning for Data Science (CS4786) Lecture11 5 Random Projections & Canonical Correlation Analysis The Tall, THE FAT AND THE UGLY n X d The Tall, THE FAT AND THE UGLY d X > n X d n = n d d The
Bardziej szczegółowoWstęp do ruby dla programistów javy
czyli dlaczego java ssie Akademickie Stowarzyszenie Informatyczne 26 lutego 2011 Podstawowe cechy Ruby vs Java Wieloparadygmatowy Imperatywny Typowanie Silne Dynamiczne Otwarte klasy Interpretowany Wszystko
Bardziej szczegółowoKurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017
Wykład 13 14 czerwiec 2017 Java vs cpp - podobieństwa Podobny sposób definiowania klas. Występowanie typów podstawowych: boolean, char, byte, short, int, long, float, double. Podobna zasada definiowania
Bardziej szczegółowoProgramowanie i projektowanie obiektowe
Programowanie i projektowanie obiektowe Przykład symulacji Paweł Daniluk Wydział Fizyki Jesień 2012 P. Daniluk (Wydział Fizyki) PO w. XII Jesień 2012 1 / 18 Symulacja sieci kolejowej A B C Zasady Na torze
Bardziej szczegółowoDokumentacja do API Javy.
Dokumentacja do API Javy http://java.sun.com/j2se/1.5.0/docs/api/ Klasy i obiekty Klasa jest to struktura zawierająca dane (pola), oraz funkcje operujące na tych danych (metody). Klasa jest rodzajem szablonu
Bardziej szczegółowowww.irs.gov/form990. If "Yes," complete Schedule A Schedule B, Schedule of Contributors If "Yes," complete Schedule C, Part I If "Yes," complete Schedule C, Part II If "Yes," complete Schedule C, Part
Bardziej szczegółowoProgramowanie w języku Java. Kolekcje
Programowanie w języku Java Kolekcje Definicja Kolekcja to obiekt, który grupuje elementy danych (inne obiekty) i pozwala traktować je jak jeden zestaw danych, umożliwiając jednocześnie wykonywanie na
Bardziej szczegółowoKomponenty sterowane komunikatami
Komponenty sterowane komunikatami 1. Usługa JMS asynchroniczność, model przesyłania komunikatów, 2. Przykład wysyłanie wiadomości, odbieranie wiadomości, komponent sterowany komunikatami 3. Komponenty
Bardziej szczegółowo1. Co można powiedzieć o poniższym kodzie (zakładając, że zaimportowano wszystkie niezbędne klasy)?
1. Co można powiedzieć o poniższym kodzie (zakładając, że zaimportowano wszystkie niezbędne klasy)? public static void test1() { Object[] o = new Object[] { "1", "2", "3" ; List l = new ArrayList(Arrays.asList(o));
Bardziej szczegółowoWykład 4: Klasy i Metody
Wykład 4: Klasy i Metody Klasa Podstawa języka. Każde pojęcie które chcemy opisać w języku musi być zawarte w definicji klasy. Klasa definiuje nowy typ danych, których wartościami są obiekty: klasa to
Bardziej szczegółowoPodstawy programowania obiektowego
Podstawy programowania obiektowego Technologie internetowe Wykład 5 Program wykładu Podejście obiektowe kontra strukturalne do tworzenie programu Pojęcie klasy i obiektu Składowe klasy: pola i metody Tworzenie
Bardziej szczegółowoTesty jednostkowe - zastosowanie oprogramowania JUNIT 4.0 Zofia Kruczkiewicz
Testy jednostkowe - zastosowanie oprogramowania JUNIT 4.0 http://www.junit.org/ Zofia Kruczkiewicz 1. Aby utworzyć test dla jednej klasy, należy kliknąć prawym przyciskiem myszy w oknie Projects na wybraną
Bardziej szczegółowoAlgorytmy z powrotami. Algorytm minimax
Algorytmy z powrotami. Algorytm minimax Algorytmy i struktury danych. Wykład 7. Rok akademicki: 2010/2011 Algorytm z powrotami rozwiązanie problemu budowane jest w kolejnych krokach, po stwierdzeniu (w
Bardziej szczegółowoJak ujarzmić hydrę czyli programowanie równoległe w Javie. dr hab. Piotr Bała, prof. UW ICM Uniwersytet Warszawski
Jak ujarzmić hydrę czyli programowanie równoległe w Javie dr hab. Piotr Bała, prof. UW ICM Uniwersytet Warszawski Prawo Moore a Ekonomicznie optymalna liczba tranzystorów w układzie scalonym zwiększa się
Bardziej szczegółowoPrzetwarzanie wielowątkowe przetwarzanie współbieżne. Krzysztof Banaś Obliczenia równoległe 1
Przetwarzanie wielowątkowe przetwarzanie współbieżne Krzysztof Banaś Obliczenia równoległe 1 Problemy współbieżności wyścig (race condition) synchronizacja realizowana sprzętowo (np. komputery macierzowe)
Bardziej szczegółowoJęzyk Java wątki (streszczenie)
Programowanie współbieżna Język Java wątki (streszczenie) Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej pawel.rogalinski @ pwr.wroc.pl Języka Java wątki Autor:
Bardziej szczegółowoJAVA W SUPER EXPRESOWEJ PIGUŁCE
JAVA W SUPER EXPRESOWEJ PIGUŁCE Obiekt Obiekty programowe to zbiór własności i zachowań (zmiennych i metod). Podobnie jak w świecie rzeczywistym obiekty posiadają swój stan i zachowanie. Komunikat Wszystkie
Bardziej szczegółowoWieloplatformowe aplikacje sieciowe. dr inż. Juliusz Mikoda mgr inż. Anna Wawszczak
Wieloplatformowe aplikacje sieciowe dr inż. Juliusz Mikoda mgr inż. Anna Wawszczak SOAP Serwer: Axis2 / Java Wbudowany komponent nasłuchujący, (Apache / Tomcat) Client Axis2 klient / XML Jeżyk programowania:
Bardziej szczegółowoDODATKOWE ĆWICZENIA EGZAMINACYJNE
I.1. X Have a nice day! Y a) Good idea b) See you soon c) The same to you I.2. X: This is my new computer. Y: Wow! Can I have a look at the Internet? X: a) Thank you b) Go ahead c) Let me try I.3. X: What
Bardziej szczegółowoProgramowanie obiektowe
Programowanie obiektowe Podstawowe cechy i możliwości języka Scala mgr inż. Krzysztof Szwarc krzysztof@szwarc.net.pl Sosnowiec, 2017 1 / 32 mgr inż. Krzysztof Szwarc Programowanie obiektowe Informacje
Bardziej szczegółowoTechnologie cyfrowe semestr letni 2018/2019
Technologie cyfrowe semestr letni 2018/2019 Tomasz Kazimierczuk Wykład 7 (08.04.2019) Wikipedia Programowanie komputerów proces projektowania, tworzenia, testowania i utrzymywania kodu źródłowego programów
Bardziej szczegółowoJęzyki i metody programowania Java INF302W Wykład 2 (część 1)
Języki i metody programowania Java INF302W Wykład 2 (część 1) Autor Dr inż. Zofia Kruczkiewicz Autor: Zofia Kruczkiewicz, Języki i metody programowania Java, wykład 2, część 1 1 Struktura wykładu 1. Identyfikacja
Bardziej szczegółowoPrzetwarzanie równoległe i współbieżne
Wątki Threads Wątki (Threads) Concurrent programming is like stepping into an entirely new world and learning a new programming language!!! (grząski grunt) Unikaj jeśli możesz rozwiazać problem! Implementacja
Bardziej szczegółowoWstęp. Ale po co? Implementacja
Wstęp Mechanizm sesji jest jedną z podstawowych form komunikacji pomiędzy skryptami jako jedyna tablica z super globalnych nie jest widoczna dla użytkownika. Mimo, że PHP od wersji 4 staje się coraz bardziej
Bardziej szczegółowoAutomatyczne generowanie testów z modeli. Bogdan Bereza Automatyczne generowanie testów z modeli
Automatyczne generowanie testów z modeli Numer: 1 (33) Rozkmina: Projektowanie testów na podstawie modeli (potem można je wykonywać ręcznie, lub automatycznie zwykle chce się automatycznie) A ja mówię
Bardziej szczegółowoJęzyki i metody programowania Java Obsługa zdarzeń - przykłady
Języki i metody programowania Java Obsługa zdarzeń - przykłady wg https://docs.oracle.com/javase/tutorial/uiswing/components/ind ex.html Autor Dr inż. Zofia Kruczkiewicz Rodzaje słuchaczy zdarzeń Wydarzenia
Bardziej szczegółowoPierwsza ramka. dr Anna Łazińska, WMiI UŁ Podstawy języka Java 1 / 10
Pierwsza ramka dr Anna Łazińska, WMiI UŁ Podstawy języka Java https://www.javatpoint.com 1 / 10 Pierwsza ramka - kod package myframe1; import javax.swing.jframe; import javax.swing.jlabel; class MyFrame1
Bardziej szczegółowoPython. Wprowadzenie. Jolanta Bachan
Python Wprowadzenie Jolanta Bachan Zainstaluj i przetestuj Pythona https://www.python.org/downloads/ print 'Hello world!' operatory numeryczne: + - * / // % ** operatory porównania: ==!= > < >=
Bardziej szczegółowoWzorce dystrybucji i wspólbieżności autonomicznej
Wzorce dystrybucji i wspólbieżności autonomicznej 1. Wzorce dystrybucji, fasada zdalna (Remote Facade), obiekt transfery danych (Data Transfer Object), 2. Wzorce współbieżności autonomicznej, blokada optymistyczna
Bardziej szczegółowoPodstawy programowania w Pythonie
Podstawy programowania w Pythonie Wykład 2 dr Andrzej Zbrzezny Instytut Matematyki i Informatyki Akademia Jana Długosza w Częstochowie 10 października 2012 dr Andrzej Zbrzezny (IMI AJD) Podstawy programowania
Bardziej szczegółowoWykorzystywanie parsera DOM w programach Java i PL/SQL
Wykorzystywanie parsera DOM w programach Java i PL/SQL Maciej Zakrzewicz mzakrz@cs.put.poznan.pl http://www.cs.put.poznan.pl/~mzakrz/ Parser DOM Aplikacja DOM API Parser DOM Dokument XML Drzewo DOM Parser
Bardziej szczegółowoDzi kuj za uwag! Spotkania z Pythonem. Cz ± 1 - podstawy - rozwi zania zada« Michaª Alichniewicz. Gda«sk 2014. Studenckie Koªo Automatyków SKALP
Spotkania z Pythonem Cz ± 1 - podstawy - rozwi zania zada«michaª Alichniewicz Studenckie Koªo Automatyków SKALP Gda«sk 2014 Dzi kuj za uwag! Na licencji Creative Commons Attribution-NonCommercial-ShareAlike
Bardziej szczegółowo(Apache) CouchDB. Krzysztof Kulewski 2008
(Apache) CouchDB Krzysztof Kulewski 2008 Czym CouchDB nie jest? Czym CouchDB nie jest? Relacyjną bazą danych Czym CouchDB nie jest? Relacyjną bazą danych Zamiennikiem dla relacyjnej bazy danych Czym CouchDB
Bardziej szczegółowoSWING c.d. przydatne narzędzia: JFileChooser, JOptionPane. drag'n drop, menu kontekstowe.
SWING c.d. ZAGADNIENIA: przydatne narzędzia: JFileChooser, JOptionPane. drag'n drop, menu kontekstowe. MATERIAŁY: http://docs.oracle.com/javase/tutorial/uiswing/dnd/ http://th-www.if.uj.edu.pl/zfs/ciesla/
Bardziej szczegółowowww.irs.gov/form990. If "Yes," complete Schedule A Schedule B, Schedule of Contributors If "Yes," complete Schedule C, Part I If "Yes," complete Schedule C, Part II If "Yes," complete Schedule C, Part
Bardziej szczegółowoJęzyki i metody programowania Java Lab1 https://docs.oracle.com/javase/tutorial/ Zofia Kruczkiewicz
Języki i metody programowania Java Lab1 https://docs.oracle.com/javase/tutorial/ Zofia Kruczkiewicz Zadanie 1. Wykonanie projektu Java SE w środowisku Netbeans- File/New Project W formularzu New Project
Bardziej szczegółowoPrzykład -
Polimorfizm Przykład - http://rpodhajny.wordpress.com klasa bazowa A, oraz klasy pochodne B1, B2,, Bn (dziedziczące po klasie bazowej). niektóre klasy pochodne chcą mieć możliwość skorzystania z metody
Bardziej szczegółowoGeneratory. Michał R. Przybyłek
Generatory Michał R. Przybyłek 1 Wstęp Generator to potencjalnie nieskończony, leniwie obliczany, ciąg wartości. W zależności od tego, która ze stron decyduje o wygenerowaniu nowej wartości wyróżniamy
Bardziej szczegółowoProgramowanie Komputerów
Programowanie Komputerów Łukasz Kuszner pokój 209, WETI http://www.kaims.pl/ kuszner/ kuszner@eti.pg.gda.pl Wykład 30 godzin, Laboratoria 30 godzin 2012/ Strona 1 z 28 1. Tablice w C# Indeksowane od zera
Bardziej szczegółowodziedziczenie - po nazwie klasy wystąpią słowa: extends nazwa_superklasy
PODSTAWOWE ELEMENTY JĘZYKA JAVA TYPY DANYCH, OPERATORY I INSTRUKCJE 1. Definicja klasy, dziedziczenie, implementowanie metod interfejsów class nazwa_klasy //ciało klasy Klasa: przed słowem class moŝe wystąpić
Bardziej szczegółowoProgramowanie i projektowanie obiektowe
Programowanie i projektowanie obiektowe Wstęp Paweł Daniluk Wydział Fizyki Jesień 2011 P. Daniluk (Wydział Fizyki) PO w. I Jesień 2011 1 / 26 Plan wykładu 1 Wstęp komputery, algorytmy i programy 2 Podstawowe
Bardziej szczegółowomodel isinga 2d ab 10 grudnia 2016
model isinga 2d ab 10 grudnia 2016 tematyka Model spinów Isinga Hamiltonian i suma statystyczna modelu Metoda Monte-Carlo. Algorytm Metropolisa. Obserwable Modelowanie: Model Isinga 1 hamiltonian I Hamiltonian,
Bardziej szczegółowoDzisiejszy wykład. Wzorce projektowe. Visitor Client-Server Factory Singleton
Dzisiejszy wykład Wzorce projektowe Visitor Client-Server Factory Singleton 1 Wzorzec projektowy Wzorzec nazwana generalizacja opisująca elementy i relacje rozwiązania powszechnie występującego problemu
Bardziej szczegółowoWielowątkowość. Programowanie w środowisku rozproszonym. Wykład 1.
Wielowątkowość Programowanie w środowisku rozproszonym. Wykład 1. Informacje organizacyjne Wymiar godzin: W-30, LAB-15 Zaliczenie wykonanie kilku programów i ich zaliczenie (w trakcie zajęć laboratoryjnych)
Bardziej szczegółowoMachine Learning for Data Science (CS4786) Lecture 11. Spectral Embedding + Clustering
Machine Learning for Data Science (CS4786) Lecture 11 Spectral Embedding + Clustering MOTIVATING EXAMPLE What can you say from this network? MOTIVATING EXAMPLE How about now? THOUGHT EXPERIMENT For each
Bardziej szczegółowoStanowe komponenty sesyjne
Stanowe komponenty sesyjne 1. Porównanie komponentów stanowych i bezstanowych. 2. Cykl życia stanowego komponentu sesyjnego, 3. Komponenty sesyjne a kontekst utrwalania, 4. Zagnieżdżanie komponentów sesyjnych,
Bardziej szczegółowo