When adding a workflow to a library, if you check “Start this workflow when an item is changed”, it will start the workflow when a item is changed.
However if there is an instance of this workflow running on that item, it won’t start a new one.
So in conclusion, it will start a workflow when:
1) Someone has changed the item, AND
2) The instance of the workflow has finished